我的想法是複製一本字典,而重置前一個所有的值,所以我有這個指令:意外的問題複製字典
var dic2 = new Dictionary<string, int>(dic.ToDictionary(kvp => kvp.Key, kvp => 0));
但是我有一個意想不到的問題,這樣做,因爲新的複製字典不具有前一個鍵的相同順序。
任何方式來重置值,但保持鍵相同的順序? Witouth採用某種分類方式?
我的想法是複製一本字典,而重置前一個所有的值,所以我有這個指令:意外的問題複製字典
var dic2 = new Dictionary<string, int>(dic.ToDictionary(kvp => kvp.Key, kvp => 0));
但是我有一個意想不到的問題,這樣做,因爲新的複製字典不具有前一個鍵的相同順序。
任何方式來重置值,但保持鍵相同的順序? Witouth採用某種分類方式?
答案不在於首先依靠Dictionary<,>
中的密鑰順序。重點是而不是保證。
這是記錄在MSDN,但幾乎沒有明確,我會一直想:
對於枚舉的目的,在字典中的每個項目 被視爲一個 KeyValuePair結構 代表一種價值和它的關鍵。 項目返回 的順序未定義。
.NET目前不具備的插入順序保留字典實現就我所知:(
字典沒有定義按鍵序列。這不是數組或列表。你不應該依賴於按鍵的順序字典。字典是用於製造通過關鍵訪問不是連續的。
淨字典是無序的。
你的問題沒有答案。
您應該考慮使用List<KeyValuePair<string, int>>
代替。
Dictionary<K,V>
中的密鑰順序不被保留。您可能需要使用SortedDictionary<K,V>
(請注意,此類根據密鑰對條目進行排序,但不允許任意順序,除非您創建特定的密鑰比較器)
實際上,它確實--KeyedCollection' –
SLaks
@SLaks:這不是一個實現'IDictionary <,>'的字典 - 它不允許你在那裏放置任意的鍵/值對。是的,你可以創建一個鍵/值對,並使用明顯的鍵提取 - 但在這個階段,你已經經歷了足夠的箍環,我認爲它不能被視爲框架的一部分...... –