LINQ конвертировать словарь в поиск
У меня есть переменная типа Dictionary<MyType, List<MyOtherType>>
Я хочу преобразовать его в Lookup<MyType, MyOtehrType>
.
Я хотел сначала использовать функции Lambda, сгладить словарь и затем преобразовать его в Lookup с помощью ToLookup()
. Я застрял со словарем. Я думал об использовании SelectMany, но не могу заставить его работать. У кого-нибудь есть идея, как это сделать?
Ответы
Ответ 1
Как насчет:
var lookup = dictionary.SelectMany(pair => pair.Value,
(pair, Value) => new { pair.Key, Value })
.ToLookup(pair => pair.Key, pair => pair.Value);
Похоже, что это немного отвлекает, когда словарь уже имеет всю информацию, сгруппированную соответствующим образом, но я не вижу простого способа обойти это. Конечно, вы могли бы реализовать ILookup<TKey, TValue>
самостоятельно с помощью обертки вокруг словаря...
Ответ 2
То же, что и метод Jon, но избегая создания анонимного типа:
var lookup = dictionary
.SelectMany(p => p.Value, Tuple.Create)
.ToLookup(p => p.Item1.Key, p => p.Item2);