我有一个非唯一值的字典,我想计算一个字符串与值的匹配。
基本上我现在做dict.ContainsValue(a)得到一个bool告诉我字符串是否存在于dict中,但我想知道它是否存在但是存在多少次(甚至可能得到一个列表它所存在的密钥绑定到了)
有没有办法用字典做这个,或者我应该寻找不同的集合?
/ Rickard Haake
答案 0 :(得分:9)
要获取值的实例数,您可以执行以下操作:
dict.Values.Count(v => v == a);
要查找具有此值的键,您可以执行以下操作:
dict.Where(kv => kv.Value == a).Select(kv => kv.Key);
答案 1 :(得分:4)
要获取计数,请使用Values.Count:
int count = dict.Values.Count(x => x == "foo");
要获取密钥,我更喜欢查询语法:
var keys = from kvp in dict
where kvp.Value == "foo"
select kvp.Key;
请注意,这需要扫描整个字典。对于小词典或不经常查找,这可能不是问题。
如果要进行多次查找,您可能希望维护第二个字典,将值映射到键。虽然这会加快查找速度,但它会减慢修改速度,因为两个字典都需要针对每次更改进行更新。
答案 2 :(得分:1)
如何使用LINQ:如果a是您要查找的值,则代码可以是
dict.Values.Where(v => v == a).Count();