2016-09-02 18 views
0

幾次發現我自己的情況:我有一個IEnumerable<T>和函數map,它將T的實例映射到IEnumerable<U>。我想生成一個由該地圖定義的ILookup<T, U>緊湊的方式將IEnumerable映射到LINQ的ILookup

這似乎是一個非常常見的用例,但我還沒有找到一種緊湊的方法來產生查找。特別是,enumT.ToLookup(t=>t, t=>map(t))產生ILookup<T, IEnumerable<U>>

+0

我並不真正關注。你有一個't []'數組和一個將單個't'映射到'IEnumerable '的函數,並且你想以某種方式使用該函數爲每個'T'生成一個單獨的'U'? –

+0

@ stephen.vakil不完全。他希望每個'T'都有一個'IEnumerable ',但他現在所擁有的是每個'T'的'IEnumerable >'。 – Servy

回答

2

在調用ToLookup之前,只需使用SelectMany即可平整序列。

var lookup = sequence.SelectMany(key => Foo(key), (key, value) => new { key, value, }) 
    .ToLookup(pair => pair.key, pair => pair.value); 
+0

謝謝,我不知道有關'SelectMany'的重載,它比我以前做的好得多。 – starwed