Как получить словарь ключ по значению в C #?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
Я хочу что-то вроде этого:
getByValueKey(string value);
getByValueKey("one")
должен быть возвращен "1"
.
Каков наилучший способ сделать это? Может быть, HashTable, SortedLists?
c#
dictionary
loviji
источник
источник
Ответы:
Значения не обязательно должны быть уникальными, поэтому вам нужно искать. Вы можете сделать что-то вроде этого:
Если значения уникальны и вставляются реже, чем считываются, создайте обратный словарь, в котором значения являются ключами, а ключи являются значениями.
источник
KeyValuePair<Tkey,Tvalue>
как это структура, поэтому тип значения никогда не может бытьnull
.FirstOrDefault
вернет экземпляр, где все поля инициализируются со значением по умолчанию (например,null
для строк или 0 для целых). Таким образом, вы не получите исключение. Но вы также не знаете, нашли ли вы значение, поэтому этот ответ не охватывает случай, когда значение не существует.Вы можете сделать это:
KeyValuePair<TKey, TValue>
в словаре (что будет значительным ударом по производительности, если у вас есть несколько записей в словаре)Используйте метод 1, если производительность не учитывается, используйте метод 2, если память не учитывается.
Кроме того, все ключи должны быть уникальными, но значения не обязательно должны быть уникальными. У вас может быть несколько ключей с указанным значением.
Есть ли причина, по которой вы не можете изменить отношение ключ-значение?
источник
Я был в ситуации, когда привязка Linq была недоступна и пришлось явно расширять лямбду. Это привело к простой функции:
Назовите это следующим образом:
Работает на .NET 2.0 и в других ограниченных средах.
источник
может быть что-то вроде этого:
источник
Я создал класс двойного поиска:
источник
Values.ToList () преобразует значения вашего словаря в список объектов. IndexOf ("one") ищет ваш новый список в поисках "one" и возвращает индекс, который будет соответствовать индексу пары ключ / значение в словаре.
Этот метод не заботится о ключах словаря, он просто возвращает индекс значения, которое вы ищете.
Имейте в виду, что в вашем словаре может быть несколько значений «один». И это причина, по которой нет метода «получить ключ».
источник
Код ниже работает только если он содержит уникальные данные значения
источник
У меня есть очень простой способ сделать это. Это сработало идеально для меня.
источник