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