[英]Convert multi-dimensional array to multi-dimensional dictionary
如何使用Lambda将int的多维数组转换为多维字典?
例如,我想将 Test1 (int[2,3]) 转换为 Test 3 (Dictionary<(int,int),int>)
int[,] Test1 = new int[2, 3];
int k = 0;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
Test1[i, j] = k++;
}
}
我可以使用“for - next”循环的传统方式轻松地将它转换成字典,但是当我尝试使用 lambda 时:
Dictionary<(int,int),int>Test3 = Enumerable.Range(0, Test1.Length)
.ToDictionary((int i ,int j )=>new { z =Test1[i, j] });
我收到以下语法错误:
Error CS0411 The type arguments for method 'Enumerable.ToDictionary<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
如何明确指定类型 arguments?
不幸的是,您不能轻松地使用 Linq 循环遍历二维数组的“行”,因为方形数组的迭代器只是循环遍历元素。 您需要使用老式的for
循环:
var Test3 = new Dictionary<(int,int),int>();
for (int i = 0; i < Test1.GetLength(0); i++)
{
Test3[(Test1[i, 0], Test1[i, 1])] = Test1[i, 2];
}
这假设前两个“列”中的对是唯一的,否则最后一个将“获胜”。
您可以使用 Linq 通过在一个轴上使用Range
来枚举行,就像您尝试做的那样:
Dictionary<(int,int),int>Test3 = Enumerable
.Range(0, Test1.GetLength(0))
.ToDictionary(i => (Test1[i, 0], Test1[i, 1]), i => Test1[i, 2]);
请注意, ToDictionary
中的 lambda 表达式分别定义了键和值。
但在我看来, for
循环更简洁、更容易理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.