[英]getting repeated combinations using LINQ
我在一个array中有两个1,2,现在我想生成所有可能的array(size = 5)组合,例如
1,2,0,0,0 || 2,1,0,0,0 || 1,0,2,0,0。 。 。 。 。
我试图编写一个递归函数,但是不起作用
现在,我想使用LINQ解决此问题,因为代码将非常小。
请帮我
LINQ非常适合搜索; 它在生成时会更糟,因此这是工作的错误工具。 递归也是如此(尽管它比LINQ更好)。 您需要的是两个嵌套循环,如下所示:
var elements = new [] {1, 2};
for (var i = 0 ; i != 5 ; i++) {
for (int j = 0 ; j != 5 ; j++) {
if (i == j) continue;
var data = new int[5];
data[i] = elements[0];
data[j] = elements[1];
ProcessCombination(data);
}
}
代码是这样的:在内部循环的每次迭代中,它将elements
数组中的第一个元素和第二个元素放置在i
和j
不同位置。 嵌套循环的范围是0
到5
,请确保覆盖所有位置组合。
您可以使用如下形式:
public static IEnumerable<IEnumerable<T>> Permute<T>(IEnumerable<T> list)
{
if (list.Count() == 1)
return new List<IEnumerable<T>> { list };
return list.Select((a, i1) => Permute(
list.Where((b, i2) => i2 != i1)).Select(
b => (new List<T> { a }).Union(b))
).SelectMany(c => c);
};
.....
var result = Permute(new int[]{1,2,0,0,0});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.