我只想在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
对此有什么建议或例子吗?
只要您只想创建两个集合的笛卡尔乘积,就可以使用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个元组,与您在问题中指定的完全相同。
如果必须创建更高维度的笛卡尔乘积,最好使用递归。