[英]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.