在.NET中生成多个列的所有可能组合

时间:2010-08-22 12:30:22

标签: .net combinatorics

我在文件中有4列,每列包含许多值,或多或少。我需要获得所有可能的组合,而结果字符串中的列顺序和节数应该保持不变。

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

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

2 个答案:

答案 0 :(得分:4)

对此有各种通用方法,但对于您确切知道已经有多少列的情况最简单的方法就是使用嵌套循环:

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
           }
        }
    }
}

替代使用LINQ:

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
}

答案 1 :(得分: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();