2013-10-23 18 views
1

有沒有一種優雅的方式來獲取字典的鍵和值以相同的順序?我很擔心,如果我使用dict.Values.ToArray()dict.Keys.ToArray()(或dict.Select(obj => obj.Key)dict.Select(obj => obj.Value)),他們將不會在同一順序。字典.Values和.Keys數組(按相同的順序)

簡單的方法來執行,這是:

foreach (var keyAndVal in dict) 
{ 
    keyList.Add(keyAndVal.Key); 
    valueList.Add(keyAndVal.Value); 
} 
var keyArray = keyList.ToArray(); 
var valueArray = valueList.ToArray(); 

對我來說,這種感覺就像那種東西LINQ被造的(但我知道,字典迭代順序是不能保證保持不變的兩個不同的電話)。有沒有一種優雅(即LINQ等)的方式來獲得這些相同的順序?

非常感謝您的幫助。

+4

你可以用'Values',從[the docs](http://msdn.microsoft.com/en-us/library/ekcfxy3x.aspx):「Dictionary .ValueCollection中的值的順序未指定,但它是相同的order作爲由Keys屬性返回的Dictionary .KeyCollection中的相關鍵。「 – vcsjones

回答

2

作爲vcsjonespoints out,對於一個標準的字典,所述KeysValues集合會以相同的順序。但是,如果你想將創建鍵和值陣列,將永遠是在相同的順序,爲IDictionary<TKey, TValue>任何實現的方法,你可以做這樣的事情:

var keyArray = new TKey[dict.Count]; 
var valueArray = new TValue[dict.Count]; 
var i = 0; 
foreach (var keyAndVal in dict) 
{ 
    keyArray[i] = keyAndVal.Key; 
    valueArray[i] = keyAndVal.Value; 
    i++; 
} 
相關問題