Как создать обратный словарь в C#C#

Место общения программистов C#
Ответить
Anonymous
 Как создать обратный словарь в C#

Сообщение Anonymous »

Давайте заведем телефонную книгу:
  • "Джон" ---> 6463
  • "Андреа" - --> 1234
  • "Майкл" ---> 2611
  • "Ирен" ---> 6463
  • "Мэтью" ---> 7699
Обратите внимание, что у Джона и Ирен один и тот же номер телефона.
Мы хотим получить перевернутую телефонную книгу. , сопоставление чисел с группами имен:
  • 1234 ---> [ "Андреа" ]
  • 2611 ---> [ "Майкл" ]
  • 6463 ---> [ «Джон», «Ирен» ]
    7699 ---> [ «Мэтью» ]
Теперь я написал на C# следующий общий метод для создания «обратного» словаря:

Код: Выделить всё

private static IDictionary ToInverseDictionary(IDictionary dictionary)
{
var inverseDictionary = new Dictionary();

foreach (var objU in dictionary.Keys)
{
var objT = dictionary[objU];

if (inverseDictionary.TryGetValue(objT, out var objsUExisting))
{
objsUExisting.Add(objU);
}
else
{
var objsU = new List();
objsU.Add(objU);
inverseDictionary[objT] = objsU;
}
}

return inverseDictionary;
}
Тогда мне посоветовали использовать LINQ. Итак, я придумал следующее:

Код: Выделить всё

private static IDictionary ToInverseDictionary(IDictionary dictionary)
{
return dictionary.GroupBy(kvp => kvp.Value).ToDictionary(grouping => grouping.Key, grouping => grouping.Select(g => g.Key).ToList());
}
Мой вопрос: дает ли последний фрагмент кода те же результаты, что и первый?
Я не совсем уверен, потому что есть " вложенные лямбды", и я немного запутался в коде.

Подробнее здесь: https://stackoverflow.com/questions/793 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»