, 我们可以用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);
}
我们知道阵列的确切数量。
我的问题是:如果数组的数量是动态的,我们如何获得笛卡儿积?
感谢。
答案 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