LINQ преобразовывают Словарь <ключ, значение> к Словарю <значение, ключ>

У меня есть день низкого озарения... Кто-либо знает о быстром и изящном способе преобразовать Словарь так, чтобы ключ стал значением и наоборот?

Пример:

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} 
// };
38
задан Morgoth 8 September 2017 в 19:11
поделиться

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);
82
ответ дан 27 November 2019 в 03:19
поделиться

Вот вы:

var reversed = orignalDictionary.ToDictionary (el => el.Value, el => el.Key);

9
ответ дан 27 November 2019 в 03:19
поделиться

Я согласен с полученными ответами, однако вам следует рассмотреть и внести изменения в вашу программу, чтобы на самом деле установить <ключ, значение> вместо того, чтобы вносить это изменение после.

0
ответ дан 27 November 2019 в 03:19
поделиться
Другие вопросы по тегам:

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