N-Ary /多列笛卡尔积

时间:2014-11-17 04:26:05

标签: linq cartesian

产品SKU中的

, 我们可以用LINQ的方式获得笛卡尔积:

string[] arr1 = new[] {"red", "blue", "orange"};
string[] arr2 = new[] {"5 inche", "8 inch"};
var result = from a in arr1
             from b in arr2
             select a + " " + b;
foreach (var item in result){
    Console.WriteLine(item);
}

我们知道阵列的确切数量。

我的问题是:如果数组的数量是动态的,我们如何获得笛卡儿积?

感谢。

2 个答案:

答案 0 :(得分:2)

我喜欢Raeen的回答,这让我想到了解决这个问题的简单方法。这是一种非常类似的方法,但不涉及计算外部的任何状态。

var list = new List<IEnumerable<string>>()
{
    new[] {"red", "blue", "orange"},
    new[] {"5 inche", "8 inch"},
    new[] {"x", "y"},
};

var result =
    list
        .Aggregate((rs, vs) =>
            from r in rs
            from v in vs
            select r + " " + v)
        .ToList();

答案 1 :(得分:0)

我将它们放在list的字符串数组中。然后我使用ForEach

IEnumerable<string> result = list.First();

list.RemoveAt(0);

list.ForEach(delegate(IEnumerable<string> value)
{
     result = (from r in result
               from v in value
               select r + " " + v).ToList();

});

您还可以看到此链接:Cartesian Product for Group members