タイプ ILookup の 2 つの変数があります。Union または Concat を使用してそれらの値を結合し、結果を同じ型の 3 番目の変数に代入したいと考えていました。Union と Concat はどちらも IGrouping を返します。IGrouping を ILookup に変換するのは非常に簡単なはずですが、私にはできません!!! :-( IGrouping は Key だけを公開するので、Lookup の 2 番目のパラメーターに苦労しています。
2903 次
1 に答える
12
使用するには、最初にシーケンスを平坦化する必要があると思いますToLookup
:
var lookup = first.Concat(second)
.SelectMany(group => group,
(group, item) => new { Key = group.Key,
Item = item })
.ToLookup(x => x.Key, x => x.Item);
これは、2 つのデリゲートを取る形式を使用しSelectMany
ます。1 つは元のシーケンスの項目をコレクションに変換し、もう 1 つは元のコレクションの項目 (つまり、グループ) と返されたコレクションの項目 (つまり、一致する項目) を取得します。そのグループのキー) を使用して、結果アイテムを取得します。これは、キーを使用してグループ化を一連のアイテムにフラット化する最も簡単な方法です (私が思うに!)。
上記はテストされていないため、完全に間違っている可能性があります。Lookup
また、比較的非効率的です... のインスタンスを直接構築する方法がないのは残念です。ILookup
もちろん、自分で実装することもできます。
于 2009-09-27T07:36:14.453 に答える