如何更简洁地在C# Dictionary中添加或更新值?
优化方案
方法一:简化TryGetValue的使用
你之前尝试TryGetValue没得到改善,可能是写法不够简洁。可以利用字典索引器的特性(不存在的key会自动添加),结合TryGetValue简化代码:
var dictionary = new Dictionary<int, int>(); foreach (var n in nums) { dictionary.TryGetValue(n, out int count); dictionary[n] = count + 1; }
这里不需要单独判断ContainsKey,TryGetValue会在key不存在时把count设为0,直接赋值count+1即可,既减少了分支判断,代码也更紧凑。
方法二:使用LINQ一行完成(最简洁)
如果项目中允许使用LINQ,这是最简洁的实现方式,直接通过分组统计完成:
var dictionary = nums.GroupBy(n => n).ToDictionary(g => g.Key, g => g.Count());
GroupBy会把相同数字分组,ToDictionary直接将分组的键和对应数量转为字典,代码量极少,可读性也很高。
注意:如果nums是非常大的集合,LINQ的性能和手动遍历相差不大,但如果对极致性能有要求,手动遍历的方式(方法一)会略优一点;如果追求代码简洁性,LINQ方式是首选。
内容的提问来源于stack exchange,提问作者yaroslove
相关产品推荐
相关产品推荐

