У меня есть словарь с не уникальные значения, и я хочу считать соответствия строки по сравнению со значениями.
В основном я теперь делаю dict. ContainsValue (a) для получения bool сообщение мне, если строка существование в dict, но я хочу знать, существует ли он, но сколько раз он существует (и возможно даже получают список ключей, он существует связанный с),
Существует ли способ сделать этот словарь использования, или я должен искать другой набор?
/Rickard Haake
Чтобы получить количество экземпляров значения, вы можете сделать что-то вроде этого:
dict.Values.Count(v => v == a);
Чтобы найти ключи, которые имеют это значение, вы можете сделать это:
dict.Where(kv => kv.Value == a).Select(kv => kv.Key);
Чтобы получить счетчик, используйте Values.Count:
int count = dict.Values.Count(x => x == "foo");
Чтобы получить ключи, я предпочитаю синтаксис запроса:
var keys = from kvp in dict
where kvp.Value == "foo"
select kvp.Key;
Обратите внимание, что для этого потребуется сканировать весь словарь. Для небольших словарей или нечастых поисков это не проблема.
Если вы делаете много поисков, возможно, вы захотите сохранить второй словарь, который сопоставляет значения с ключами. Хотя это ускорит поиск, это замедлит внесение изменений, поскольку оба словаря будут нуждаться в обновлении при каждом изменении.
что насчет использования LINQ: если a - искомое значение, то код может быть таким
dict.Values.Where(v => v == a).Count();