2010-03-03 25 views
0

我的想法是複製一本字典,而重置前一個所有的值,所以我有這個指令:意外的問題複製字典

var dic2 = new Dictionary<string, int>(dic.ToDictionary(kvp => kvp.Key, kvp => 0)); 

但是我有一個意想不到的問題,這樣做,因爲新的複製字典不具有前一個鍵的相同順序。

任何方式來重置值,但保持鍵相同的順序? Witouth採用某種分類方式?

回答

7

答案不在於首先依靠Dictionary<,>中的密鑰順序。重點是而不是保證。

這是記錄在MSDN,但幾乎沒有明確,我會一直想:

對於枚舉的目的,在字典中的每個項目 被視爲一個 KeyValuePair結構 代表一種價值和它的關鍵。 項目返回 的順序未定義。

.NET目前不具備的插入順序保留字典實現就我所知:(

+0

實際上,它確實--KeyedCollection ' – SLaks

+2

@SLaks:這不是一個實現'IDictionary <,>'的字典 - 它不允許你在那裏放置任意的鍵/值對。是的,你可以創建一個鍵/值對,並使用明顯的鍵提取 - 但在這個階段,你已經經歷了足夠的箍環,我認爲它不能被視爲框架的一部分...... –

1

字典沒有定義按鍵序列。這不是數組或列表。你不應該依賴於按鍵的順序字典。字典是用於製造通過關鍵訪問不是連續的。

3

淨字典是無序的。

你的問題沒有答案。

您應該考慮使用List<KeyValuePair<string, int>>代替。

3

Dictionary<K,V>中的密鑰順序不被保留。您可能需要使用SortedDictionary<K,V>(請注意,此類根據密鑰對條目進行排序,但不允許任意順序,除非您創建特定的密鑰比較器)