2009-09-23 39 views
12

Tôi có một loại số Dictionary<MyType, List<MyOtherType>>
Tôi muốn chuyển đổi nó thành một số Lookup<MyType, MyOtehrType>.LINQ Chuyển Từ điển sang Tra cứu

Tôi muốn sử dụng hàm Lambda trước tiên, làm phẳng từ điển và sau đó chuyển đổi từ này sang Tra cứu bằng cách sử dụng ToLookup(). Tôi bị kẹt với từ điển. Tôi nghĩ về việc sử dụng SelectMany nhưng không thể làm cho nó hoạt động. Bất cứ ai cũng có một ý tưởng làm thế nào để làm điều đó?

Trả lời

12

Làm thế nào về:

var lookup = dictionary.SelectMany(pair => pair.Value, 
            (pair, Value) => new { pair.Key, Value }) 
         .ToLookup(pair => pair.Key, pair => pair.Value); 

Nó cảm thấy như một chút một sự lãng phí làm điều này khi từ điển đã có tất cả các thông tin được nhóm lại một cách thích hợp, nhưng tôi không thể nhìn thấy một cách đơn giản tròn đó. Tất nhiên bạn có thể thực hiện ILookup<TKey, TValue> mình với một wrapper xung quanh từ điển ...

+0

Cảm ơn Jon! Chính xác những gì tôi đã làm sau! –

14

Tương tự như phương pháp Jon, nhưng tránh việc tạo ra một loại vô danh:

var lookup = dictionary 
      .SelectMany(p => p.Value, Tuple.Create) 
      .ToLookup(p => p.Item1.Key, p => p.Item2); 
+1

Cảm ơn bạn! Đây là những gì C# được cho là giống như :) –

Các vấn đề liên quan