2014-11-22 47 views
0

我有一個Dictionary<K,V>與一個已知的,不變的一組密鑰。 我想重置字典,但保留鍵的值,只更改值爲null重置一個.NET字典保存鍵

我可以先在字典上調用Clear(),然後重新添加一對與null作爲一個值,應該有更好的方法。

+0

更好的性能或更好的可讀性? – kennyzx 2014-11-22 12:26:15

+0

兩者都很棒,但如果有選擇,我會提高可讀性。 – mookid 2014-11-22 12:30:21

+0

如果您提前知道字典的大小,可以通過將已知大小傳遞給構造函數來獲得性能提升。這將防止調整操作的需要。如果要將值設置爲空,則必須訪問每個值並分別設置它們。 – Grax 2014-11-22 12:31:08

回答

4

您可以使用鍵和設置所有值爲null

例如

var d = new Dictionary<int, string>(); 
d.Keys.ToList().ForEach(x => d[x] = null); 

這裏是您可以使用擴展方法列表中,選擇哪套房,您的情況更好,並測試其性能

public static class DictionaryExtensions 
{ 
    public static Dictionary<K, V> ResetValues<K, V>(this Dictionary<K, V> dic) 
    { 
     dic.Keys.ToList().ForEach(x => dic[x] = default(V)); 
     return dic; 
    } 

    public static Dictionary<K,V> ResetValuesWithNewDictionary<K, V>(this Dictionary<K, V> dic) 
    { 
     return dic.ToDictionary(x => x.Key, x => default(V), dic.Comparer); 
    } 

} 

,並使用它像

var d = new Dictionary<int, string>(); 
d.ResetValues().Select(..../*method chaining is supported*/); 

d = d.ResetValuesWithNewDictionary().Select(..../*method chaining is supported*/); 
+0

「WithNewDictionary」版本應該可能會將原始字典的Comparer屬性傳遞給相應的ToDictionary重載,以便保留比較語義(例如區分大小寫)。 – Joe 2014-11-22 13:03:10

+0

好點!固定@Joe – dotctor 2014-11-22 13:10:07