数组的不同组合(C#)

我们如何使用c#代码找出数组元素的不同组合。 有没有内置的库函数。

例如:假设一个数组有元素{2,3,4,5,6,7},那么可能的组合将是2,3,4,5,6,7,2 3,2 3 4,2 3 4 5等等

所以基本上我需要的是一个函数,根据其输入给出不同的组合,例如:comb(array,2)给出输出2 3,1 2,3 4和comb(array,3)给出输出1 2 3,2 3 4,3 4 5等

例如:array = {1,2,3}和length = 2的有效组合是1 2,1 3,2 3 …..

static void Main() { var cnk = comb(new [] {1,2,3},2); foreach ( var c in cnk) { } } public static IEnumerable comb(int[] a, int k) { if (a == null || a.Length == 0 || k < 1 || k > a.Length) yield break; int n = a.Length; // 1 if ( k == 1) for ( int i = 0; i < n; i++) { yield return new int[] {a[i]}; } else { // k for ( int i = 0; i < n - k + 1; i++) { var res = new int[k]; for (int t = i, c = 0; t < i + k - 1; t++, c++) res[c] = a[t]; for (int j = i + k - 1; j < n; j++) { res[k-1] = a[j]; yield return res; } } } } 

你应该从这里采取算法, 我的答案没有解决你的问题 算法从n返回k元素的所有组合

似乎逻辑不是绝对正确的:

 var cnk = comb(new[] { 1, 2, 3, 4 }, 3); 

这给出了3个变体,但事实上它是4:

 1 2 3 1 2 4 1 3 4 2 3 4 

我猜梳子最好以递归方式实现。