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等。
我喜歡文件中的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等。
有各種通用接近這一點,但最簡單的,你知道你到底有多少列有一個情況就是使用嵌套的循環:使用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
}
假設你已經解析文件到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();
這被稱爲笛卡爾產品。毫無疑問,在某處有一個通用的.net實現! – 2010-08-23 12:51:10