返回c#字典的匹配数

时间:2010-05-26 11:43:45

标签: c# collections

我有一个非唯一值的字典,我想计算一个字符串与值的匹配。

基本上我现在做dict.ContainsValue(a)得到一个bool告诉我字符串是否存在于dict中,但我想知道它是否存在但是存在多少次(甚至可能得到一个列表它所存在的密钥绑定到了)

有没有办法用字典做这个,或者我应该寻找不同的集合?

/ Rickard Haake

3 个答案:

答案 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();