考慮以下幾點:LINQ ToArray的()改變陣列長度
Dictionary<int,int> dict = new Dictionary<int,int>();
dict.Add(1, 3);
dict.Add(3, 4);
int [] a = new int [] { 1, 2, 3 };
int [] b = new int [a.Length];
Console.WriteLine("a:");
a.Dump(); //using linqpad here
Console.WriteLine("b:");
b.Dump(); //using linqpad here
b = dict.OrderByDescending(x => x.Value).Select(x => x.Key).ToArray();
Console.WriteLine("b after linq:");
b.Dump(); //using linqpad here
成績
a: 1 2 3
b: 0 0 0
b after linq: 3 1
我已經現有陣列a
。我創建了一個長度相同的新陣列b
。經過linq查詢後,ToArray()
值被添加到新數組b
,但長度發生變化。有沒有辦法保留原始數組長度,同時仍然將值添加到它?
期望的結果
b after linq: 3 1 0
你是**用'Dictionary <>'鍵重新賦值你的b數組,所以結果在任何方面都是正確的。 –
您必須將'dict.OrderByDescending(x => x.Value).Select(x => x.Key).ToArray();'的結果賦值給另一個變量,然後將'Array.Copy'賦值給'b '從那裏。 – dcg
ToArray()方法不會更改b的長度。它從兩個字典鍵創建一個新的數組。 'b ='賦值用新創建的數組替換舊的b數組。您可能想要循環新數組並將每個值分配給數組b中的相應索引。 –