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

在.NET中生成多个列的所有可能组合,.net,combinatorics,.net,Combinatorics,我在一个文件中有4列,每列或多或少都包含一些值。我需要得到所有可能的组合,而结果字符串中的列顺序和节数应该保持不变 例如,第一列包含范围为1-100的数字,第二列:字母a-z,第三列也是数字,我会得到如下结果 1-A-1,2-A-1,3-A-1;1-B-1、1-B-2、1-B-3等等。有各种通用方法,但对于确切知道有多少列的情况,最简单的方法就是使用嵌套循环: foreach (var a in firstColumn) { foreach (var b in secondColumn)

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

例如,第一列包含范围为1-100的数字,第二列:字母a-z,第三列也是数字,我会得到如下结果


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

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

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
}

假设已将文件解析为
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();
class-Foo
{
公共字符串Column1{get;set;}
公共字符串Column2{get;set;}
公共字符串Column3{get;set;}
公共字符串Column4{get;set;}
}
List=ParseFile();
var query=从列表中的f1开始
从列表中的f2开始
从列表中的f3开始
从列表中的f4开始
选择新Foo
{
Column1=f1.Column1,
第2列=f2.2列,
第3列=f3.3列,
Column4=f4.Column4,
};
Foo[]combines=query.ToArray();

这称为笛卡尔积。肯定有一个通用的.net实现!