Возвратите количество соответствий из c# словаря

У меня есть словарь с не уникальные значения, и я хочу считать соответствия строки по сравнению со значениями.

В основном я теперь делаю dict. ContainsValue (a) для получения bool сообщение мне, если строка существование в dict, но я хочу знать, существует ли он, но сколько раз он существует (и возможно даже получают список ключей, он существует связанный с),

Существует ли способ сделать этот словарь использования, или я должен искать другой набор?

/Rickard Haake

5
задан Rickard Haake 26 May 2010 в 11:43
поделиться

3 ответа

Чтобы получить количество экземпляров значения, вы можете сделать что-то вроде этого:

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

Чтобы найти ключи, которые имеют это значение, вы можете сделать это:

dict.Where(kv => kv.Value == a).Select(kv => kv.Key);
9
ответ дан 18 December 2019 в 13:11
поделиться

Чтобы получить счетчик, используйте Values.Count:

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

Чтобы получить ключи, я предпочитаю синтаксис запроса:

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

Обратите внимание, что для этого потребуется сканировать весь словарь. Для небольших словарей или нечастых поисков это не проблема.

Если вы делаете много поисков, возможно, вы захотите сохранить второй словарь, который сопоставляет значения с ключами. Хотя это ускорит поиск, это замедлит внесение изменений, поскольку оба словаря будут нуждаться в обновлении при каждом изменении.

4
ответ дан 18 December 2019 в 13:11
поделиться

что насчет использования LINQ: если a - искомое значение, то код может быть таким

dict.Values.Where(v => v == a).Count();
1
ответ дан 18 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: