我有一個Dictionary<K,V>
與一個已知的,不變的一組密鑰。 我想重置字典,但保留鍵的值,只更改值爲null
。重置一個.NET字典保存鍵
我可以先在字典上調用Clear()
,然後重新添加一對與null
作爲一個值,應該有更好的方法。
我有一個Dictionary<K,V>
與一個已知的,不變的一組密鑰。 我想重置字典,但保留鍵的值,只更改值爲null
。重置一個.NET字典保存鍵
我可以先在字典上調用Clear()
,然後重新添加一對與null
作爲一個值,應該有更好的方法。
您可以使用鍵和設置所有值爲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*/);
更好的性能或更好的可讀性? – kennyzx 2014-11-22 12:26:15
兩者都很棒,但如果有選擇,我會提高可讀性。 – mookid 2014-11-22 12:30:21
如果您提前知道字典的大小,可以通過將已知大小傳遞給構造函數來獲得性能提升。這將防止調整操作的需要。如果要將值設置爲空,則必須訪問每個值並分別設置它們。 – Grax 2014-11-22 12:31:08