Дополнительно
получить ключ словаря по значению
Как получить ключ словаря по значению в C#?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
Мне нужно что-то вроде этого:
getByValueKey(string value);
getByValueKey("one")
должен возвращать "1"
.
Как лучше всего это сделать? Может быть HashTable, SortedLists?
334
8
Значения не обязательно должны быть уникальными, поэтому необходимо выполнить поиск. Вы можете сделать что-то вроде этого:
Если значения уникальны и вставляются реже, чем считываются, то создайте инверсный словарь, где значения - ключи, а ключи - значения.
Вы можете это сделать:
KeyValuePair
'ы в словаре (это будет значительный удар по производительности, если у вас много записей в словаре).Используйте метод 1, если производительность не имеет значения, и метод 2, если память не имеет значения.
Кроме того, все ключи должны быть уникальными, но значения не обязаны быть уникальными. У вас может быть более одного ключа с указанным значением.
Есть ли какая-либо причина, по которой вы не можете обратить отношения "ключ-значение"?
Я был в ситуации, где привязка LINQ, которая не была доступна и имела значительное расширение лямда. Он вылился в простую функцию:
С# публичных KeyByValue статические Т<т ш>(словарь<т ш> дикт, Вт вал) { Т ключ = по умолчанию; KeyValuePair цикл foreach (<Т, П> пара в дикт) { если (EqualityComparer<Б>.По умолчанию.Равна(пара.Значение, Вэл)) { ключ = пара.Ключ; перерыв; } } вернуть ключ; }
Называйте это как следующее:
Работает на .Net 2.0 и в других ограниченных средах.
Я создал двойной подстановки класса:
может, что-то вроде этого:
Значения.Список() преобразует значения словарь в список объектов. Метод indexOf("один и") ищет свой новый список, ищу "один" и возвращает индекс которого соответствует индексу пара ключ/значение в словаре.
Этот метод не заботится о ключи словаря, он просто возвращает указатель на значение, которое вы ищете.
Имейте в виду, там может быть больше, чем одна "один" и значение в свой словарь. И именно по этой причине там нет "клавиша" и метод.
Ниже код работает, только если он содержит уникальные данные, стоимость
У меня есть очень простой способ сделать это. Он сработал идеально для меня.