在.NET中生成多个列的所有可能组合
我在一个文件中有4列,每列或多或少都包含一些值。我需要得到所有可能的组合,而结果字符串中的列顺序和节数应该保持不变 例如,第一列包含范围为1-100的数字,第二列:字母a-z,第三列也是数字,我会得到如下结果在.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)
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实现!