简体   繁体   中英

Return number of matches from c# dictionary

I have a dictionary with non unique values and I want to count the matches of a string versus the values.

Basically I now do dict.ContainsValue(a) to get a bool telling me if the string a exists in dict, but I want to know not only if it exists but how many times it exists (and maybee even get a list of the keys it exists bound to)

Is there a way to do this using dictionary, or should I look for a different collection?

/Rickard Haake

To get the number of instances of the value you could do something like this:

dict.Values.Count(v => v == a);

To find the keys that have this value you could do this:

dict.Where(kv => kv.Value == a).Select(kv => kv.Key);

To get the count use Values.Count:

int count = dict.Values.Count(x => x == "foo");

To get the keys I prefer the query syntax:

var keys = from kvp in dict
           where kvp.Value == "foo"
           select kvp.Key;

Note that this will require scanning the entire dictionary. For small dictionaries or infrequent lookups this may not be a problem.

If you are making many lookups you may wish to maintain a second dictionary that maps the values to the keys. Whilst this will speed up lookups, it will slow down modifications as both dictionaries will need updating for each change.

如何使用LINQ:如果a是您要查找的值,则代码可以是

dict.Values.Where(v => v == a).Count();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM