具有给定数字(C#)的单个列表中的数字的笛卡尔积

时间:2015-02-20 11:26:14

标签: c# list combinations cartesian-product cartesian

我只想在C#中的指定号码的单个列表中获取数字的笛卡尔积。在下面,我举了一些实际上我想要的例子:

List<int> numbers = new List<int>() { 0, 1, 2 };

应该有一个函数来获得具有给定数n的所有笛卡尔积。

例如,n = 2然后输出应该是这样的:

0,0
0,1
0,2
1,0
1,1
1,2
2,0
2,1
2,2

对此有任何建议或示例吗?

1 个答案:

答案 0 :(得分:2)

只要您只想创建两个集合的笛卡尔积,就可以使用LINQ SelectMany

var n = 2;
var numbers = Enumerable.Range(0, n + 1);
var cartesianProduct = numbers.SelectMany(_ => numbers, (a, b) => Tuple.Create(a, b));

枚举cartesianProduct时,它将完全按照您在问题中指定的方式生成9个元组。

如果您必须创建更高维度it is better to use recursion的笛卡尔积。