csharp 用于以所选元素阵列的词典顺序生成所有排列的扩展方法。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 用于以所选元素阵列的词典顺序生成所有排列的扩展方法。相关的知识,希望对你有一定的参考价值。

// http://en.wikipedia.org/wiki/Permutation#Generation_in_lexicographic_order
public static IEnumerable<TRes> AllPermutationsWithSelector<TSource, TRes>(this TSource[] seq, Func<IEnumerable<TSource>, TRes> selector)
{
	int n = seq.Length;
	var arr = Enumerable.Range(0, n).ToArray();

	while (true)
	{
		// Building result string, then generating next permutation
		yield return selector(arr.Select(i => seq[i]));

		// Finding largest k such that a[k] > a[k - 1]
		int k = n;
		while (--k > 0 && (arr[k] < arr[k - 1])) { }
		if (k == 0) yield break;
		int temp = arr[k - 1];

		// Finding largest l such that a[l] > a[k]
		int l = seq.Length;
		while (arr[--l] < temp) { }

		// Swap values
		arr[k - 1] = arr[l];
		arr[l] = temp;

		// Reversing the sequence from a[k] up to a[n]
		for (int i = 0; i < (n - k) / 2; i++)
		{
			temp = arr[i + k];
			arr[i + k] = arr[n - 1 - i];
			arr[n - 1 - i] = temp;
		}
	}
}

以上是关于csharp 用于以所选元素阵列的词典顺序生成所有排列的扩展方法。的主要内容,如果未能解决你的问题,请参考以下文章

csharp 内容生成器的示例代码,用于将子文本元素添加到当前元素

[翻译]基于词典序的生成下一排列算法

csharp 内容生成器的示例代码,用于在tech doc的元素中显示tech doc的元数据

csharp 编辑器脚本,用于创建所选文件的资产包。复制到Unity3D环境并单击其要使用的菜单项。

python里面词典作用是啥?

请求 AVAsset 时维护顺序