получите ключ словаря значением

Как я получаю ключ Словаря значением в C#?

Dictionary<string, string> types = new Dictionary<string, string>()
{
            {"1", "one"},
            {"2", "two"},
            {"3", "three"}
};

Я хочу что-то вроде этого:

getByValueKey(string value);

getByValueKey("one") должен быть возврат "1".

Каков лучший способ, делают это? Возможно, HashTable, SortedLists?

335
задан Cœur 10 July 2018 в 03:15
поделиться

2 ответа

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

var myKey = types.FirstOrDefault(x => x.Value == "one").Key;

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

605
ответ дан 23 November 2019 в 00:41
поделиться

Это можно сделать:

  1. Перебрав все KeyValuePair в словаре (который приведет к значительному снижению производительности, если у вас есть несколько записей в словаре)
  2. Используйте два словаря, один для сопоставления значений и ключей, а другой для сопоставления ключей и значений (что займет вдвое больше места в памяти).

Используйте метод 1, если производительность не важна, используйте метод 2, если память не важна.

Кроме того, все ключи должны быть уникальными, но значения не обязательно должны быть уникальными. У вас может быть несколько ключей с указанным значением.

Есть ли причина, по которой вы не можете изменить отношение "ключ-значение"?

25
ответ дан 23 November 2019 в 00:41
поделиться
Другие вопросы по тегам:

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