根據MSDN:枚舉通過Dictionary.KeyCollection爲了
鍵在 Dictionary.KeyCollection的順序 不確定
我假設,這是因爲增加的Dictionary被放入某種散列表中。
但是,我想從字典中將.Keys集合作爲IEnumerable(或可能作爲ICollection)從方法返回,並按它們最初添加到Dictionary中的順序進行枚舉。
如何最好地實現這一目標?
(我使用的Winforms,.NET 2.0)
根據MSDN:枚舉通過Dictionary.KeyCollection爲了
鍵在 Dictionary.KeyCollection的順序 不確定
我假設,這是因爲增加的Dictionary被放入某種散列表中。
但是,我想從字典中將.Keys集合作爲IEnumerable(或可能作爲ICollection)從方法返回,並按它們最初添加到Dictionary中的順序進行枚舉。
如何最好地實現這一目標?
(我使用的Winforms,.NET 2.0)
然後保持分開在List<T>
鍵。字典中不再存在原始順序。該列表將重複插入順序。
您可以用List<KeyValuePair<K,V>>
來代替Dictionary<K,V>
來維持秩序。當然,問題在於,更新密鑰的值變得更加困難,並且您可能有重複的密鑰。但是,可以用這些擴展方法來處理
public static void AddOrUpdate<K, V>(this List<KeyValuePair<K, V>> list, K key, V value)
{
var pair = list.SingleOrDefault(kvp => kvp.Key.Equals(key));
if (!pair.Equals(null))
list.Remove(pair);
list.Add(new KeyValuePair<K, V>(key, value));
}
public static V GetValue<K, V>(this List<KeyValuePair<K, V>> list, K key)
{
var pair = list.SingleOrDefault(kvp => kvp.Key.Equals(key));
if (pair.Equals(null))
return default(V); //or throw an exception
return pair.Value;
}
public static bool ContainsKey<K, V>(this List<KeyValuePair<K, V>> list, K key)
{
return list.Any(kvp => kvp.Key.Equals(key));
}
也許SortedDictionary可能做你需要的,如果關鍵是插入順序(1,2,3,...等)
我想過使用另一個列表,但如果沒有必要,這似乎是重複,並想知道是否有什麼我失蹤與字典。但是,如果確實是這樣做的話,那麼沒問題,謝謝。 –
Andy
2010-12-18 15:59:37