我有一个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