2016-09-02 7 views
0

私は数回で自分自身を見つけたような状況にILookupへのIEnumerableをマップします。私はILookup<T, U>をその地図で定義したいと思っています。コンパクトな方法は、LINQ

これはかなり一般的な使用例のようですが、私はルックアップを作成するコンパクトな方法を見つけていません。特に、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

関連する問題