LINQ将字典转换为查找

18 linq lookup dictionary

我有一个类型的变量Dictionary<MyType, List<MyOtherType>>
我想将它转换为Lookup<MyType, MyOtehrType>.

我想首先使用Lambda函数,展平字典,然后使用ToLookup().将其转换为Lookup .我被困在字典里.我想过使用SelectMany却无法使用它.任何人都知道该怎么做?

3dG*_*ber 19

与Jon的方法相同,但避免创建匿名类型:

var lookup = dictionary
            .SelectMany(p => p.Value, Tuple.Create)
            .ToLookup(p => p.Item1.Key, p => p.Item2);
Run Code Online (Sandbox Code Playgroud)

  • @3dGrabber “Beat the Skeet”绝对应该是一个徽章。 (3认同)
  • 因此,当您用答案击败Jon Skeet时,应该为他们颁发徽章;) (2认同)

Jon*_*eet 16

怎么样:

var lookup = dictionary.SelectMany(pair => pair.Value,
                                   (pair, Value) => new { pair.Key, Value })
                       .ToLookup(pair => pair.Key, pair => pair.Value);
Run Code Online (Sandbox Code Playgroud)

当字典已经适当地分组了所有信息时,它确实感觉有点浪费,但我看不到一个简单的方法.当然,您可以ILookup<TKey, TValue>使用字典周围的包装器来实现自己...