2010-08-22 114 views
2

我喜欢文件中的4列,每列都包含一些值,或多或少。我需要获得所有可能的组合,而列的顺序和结果字符串中的部分数量应保持不变。在.NET中生成几列中所有可能的组合

E.g.第一列包含1-100的数字,第二列:字母a-z,第三列也是数字,我会得到类似于

1-A-1,2-A-1,3-A-1; 1-B-1,1-B-2,1-B-3等。

+0

这被称为笛卡尔产品。毫无疑问,在某处有一个通用的.net实现! – 2010-08-23 12:51:10

回答

4

有各种通用接近这一点,但最简单的,你知道你到底有多少列有一个情况就是使用嵌套的循环:使用LINQ

foreach (var a in firstColumn) 
{ 
    foreach (var b in secondColumn) 
    { 
     foreach (var c in thirdColumn) 
     { 
      foreach (var d in fourthColumn) 
      { 
       // Do something with a, b, c, d 
      } 
     } 
    } 
} 

备选:

var query = from a in firstColumn 
      from b in secondColumn 
      from c in thirdColumn 
      from d in fourthColumn 
      select new { a, b, c, d }; 
foreach (var tuple in query) 
{ 
    // Do something with tuple.a, tuple.b etc 
} 
0

假设你已经解析文件到Foo对象的列表,其中每个属性包含一个列的值:

class Foo 
{ 
    public string Column1 { get; set; } 
    public string Column2 { get; set; } 
    public string Column3 { get; set; } 
    public string Column4 { get; set; } 
} 

List<Foo> list = ParseFile(); 


var query = from f1 in list 
      from f2 in list 
      from f3 in list 
      from f4 in list 
      select new Foo 
      { 
       Column1 = f1.Column1, 
       Column2 = f2.Column2, 
       Column3 = f3.Column3, 
       Column4 = f4.Column4, 
      }; 

Foo[] combinations = query.ToArray();