У меня есть день низкого озарения... Кто-либо знает о быстром и изящном способе преобразовать Словарь так, чтобы ключ стал значением и наоборот?
Пример:
var originalDictionary = new Dictionary<int, string>() {
{1, "One"}, {2, "Two"}, {3, "Three"}
};
становится
var newDictionary = new Dictionary<string, int>();
// contents:
// {
// {"One", 1}, {"Two", 2}, {"Three", 3}
// };
Использовать ToDictionary ?
orignalDictionary.ToDictionary(kp => kp.Value, kp => kp.Key);
Это работает, потому что IDictionary
; также является IEnumerable
;. Просто имейте в виду, что если у вас есть повторяющиеся значения, вы получите исключение.
Если у вас есть повторяющиеся значения, вам нужно будет решить, что с ними делать. Один простой способ - игнорировать дубликаты, сначала сгруппировав их по значению, а затем составив словарь.
originalDictionary
.ToLookup(kp => kp.Value)
.ToDictionary(g => g.Key, g => g.First().Key);
Вот вы:
var reversed = orignalDictionary.ToDictionary (el => el.Value, el => el.Key);
Я согласен с полученными ответами, однако вам следует рассмотреть и внести изменения в вашу программу, чтобы на самом деле установить <ключ, значение>
вместо того, чтобы вносить это изменение после.