- "Джон" ---> 6463
- "Андреа" - --> 1234
- "Майкл" ---> 2611
- "Ирен" ---> 6463
- "Мэтью" ---> 7699
Мы хотим получить перевернутую телефонную книгу. , сопоставление чисел с группами имен:
- 1234 ---> [ "Андреа" ]
- 2611 ---> [ "Майкл" ]
- 6463 ---> [ «Джон», «Ирен» ]
7699 ---> [ «Мэтью» ]
Код: Выделить всё
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;
}
Код: Выделить всё
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
Мобильная версия