ILookup<TKey, TVal>
とIGrouping<TKey, TVal>
の違いを明確にするのに問題がありましたが、今正しく理解していれば不思議です。 LINQはIGrouping
アイテムのシーケンスを生成することで問題を複雑化し、またToLookup
拡張メソッドを与えました。それで、私がもっと綿密に見えるまで、彼らは同じように感じました。以下のようにたくさん見えるどのILookup <TKey, TVal>とIGrouping <TKey, TVal>
var q2 = N.GroupBy(n => n.MyKey, n => n);
// q2 is IEnumerable<IGrouping<TKey, TVal>>
:と同等です
var q1 =
from n in N
group n by n.MyKey into g
select g;
// q1 is IEnumerable<IGrouping<TKey, TVal>>
var q3 = N.ToLookup(n => n.MyKey, n => n);
// q3 is ILookup<TKey, TVal>
私は、次のアナロジーで修正アム?
IGrouping<TKey, TVal>
値が実際の要素の配列(よりむしろ単一の要素)であるKeyValuePair<TKey, TVal>
に類似する単一のグループ(すなわち、キー順)、IEnumerable<IGrouping<TKey, TVal>>
は同様のもののシーケンス(ですIDictionary<TKey, TVal>
- を繰り返し処理するとき何を得るに
ILookup<TKey, TVal>
は、より多くの値が実際の要素
ありがとうございます。私は前にプッシュ/プルの点でLinqを考えていない。私がGoogleに行ったとき、私はあなたのブログの1つに出くわしたので、それをチェックします。興味深い考え方のように思えます。 – mckamey
私はまだこれらの違いが2つの異なるインターフェイスを正当化しないと思っています。私は、図書館のデザイナーはただ一つのインターフェースを決めておくべきだと思います。たぶん、ここでは十分に明確ではない個人的な好みです。 – rudimenter
GroupByとGroupJoinの混乱がありますか?それらはただ概念的にしか関連していません。しかし、それは単に答えのタイプミスです。 – sehe