2010-08-22 113 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();