动态数据的可能组合?

时间:2016-06-24 07:40:41

标签: c# asp.net .net

我有四个字符串列表。列表数量可能会增加或减少。

  • List1 = 1.1,1.2
  • List2 = 2.1,2.2,2.3,2.4
  • List3 = 3.1,3.2
  • List4 = 4.1,4.2

列表中的值数量可能会增加或减少。

结果应该:

  • 1.1,2.1,3.1,4.1
  • 1.1,2.1,3.1,4.2
  • 1.1,2.1,3.2,4.1
  • 1.1,2.1,3.2,4.2
  • 1.1,2.2,3.1,4.1
  • 1.1,2.2,3.1,4.2
  • 1.1,2.2,3.2,4.1
  • 1.1,2.2,3.2,4.2
  • 1.1,2.3,3.1,4.1
  • 1.1,2.3,3.1,4.2
  • 1.1,2.3,3.2,4.1
  • 1.1,2.3,3.2,4.2
  • 1.1,2.4,3.1,4.1
  • 1.1,2.4,3.1,4.2
  • 1.1,2.4,3.2,4.1

2 个答案:

答案 0 :(得分:0)

您可以在列表之间应用cross join并获得所有可能的组合。

var result = 
           (from val1 in List1
            from val2 in List2
            from val3 in List3
            from val4 in List4
            select new double[] {val1,val2,val3,val4}
        ).ToList();

如果您想要使用,string.Join,分开,请在输出中将<{1}}指定为分隔符。

检查此Demo

答案 1 :(得分:0)

var input = new[]
{
    new List<double> { 1.1, 1.2 },
    new List<double> { 2.1, 2.2, 2.3, 2.4 },
    new List<double> { 3.1, 3.2 },
    new List<double> { 4.1, 4.2 },
    ...
};            

var output = input.Aggregate((IEnumerable<IEnumerable<double>>)new[] { new double[0] }, (combos, values) =>
    values.SelectMany(value => combos.Select(combo =>
        combo.Concat(new[] { value }))));

foreach (var combo in output)
{
    Console.WriteLine(string.Join(", ", combination));
}