преобразовать словарь <int, Enumerable> в словарь <int, Enumerable>, инвертирующий контент - PullRequest
4 голосов
/ 25 августа 2009

для ясности, скажем, у нас есть ученики и классы, это отношения многих ко многим.

У меня есть словарь, в котором ключ - это идентификатор студента, а Enumerable - это набор классов (скажем, у нас просто есть идентификатор), и я хочу вернуть его в словарь classId, студенты

есть ли способ сделать это с Linq? Я могу придумать способ сделать это с помощью циклов, но я уверен, что есть способ сделать это.

Ответы [ 2 ]

7 голосов
/ 25 августа 2009
var newDic = dic
   .SelectMany(pair => pair.Value
                           .Select(val => new { Key = val, Value = pair.Key }))
   .GroupBy(item => item.Key)
   .ToDictionary(gr => gr.Key, gr => gr.Select(item => item.Value));
2 голосов
/ 25 августа 2009

Это должно сделать:

var invertedDic = dic
    .SelectMany(x => x.Value, (pair, value) => new {key = pair.Key, value = value})
    .GroupBy(x => x.Value, x => x.Key, (value, key) => new {value, key})
    .ToDictionary(x => x.Value, x => x.Key);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...