繁体   English   中英

使用LINQ获得重复组合

[英]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数组中的第一个元素和第二个元素放置在ij不同位置。 嵌套循环的范围是05 ,请确保覆盖所有位置组合。

您可以使用如下形式:

  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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM