LINQ ToDictionaryとToLookupの違いは何ですか


回答:


176

辞書は1対1のマップ(各キーは単一の値にマップされます)であり、事後に辞書は変更可能(編集可能)です。

ルックアップは1:多くのマップ(マルチマップ。各キーはIEnumerable<>そのキーを持つ値の1つにマップされます)であり、ILookup<,>インターフェースに変更はありません。

補足として、存在しないキーで(インデクサーを介して)ルックアップをクエリすると、空のシーケンスが取得されます。辞書でも同じことをすると例外が発生します。

では、各キーを共有するレコードはいくつですか?

非常に単純化された見方は、a Lookup<TKey,TValue>はa にほぼ匹敵するということです。Dictionary<TKey,IEnumerable<TValue>>


5
またgroupbyにいくらか似ていますか?
カルロV.ダンゴ

7
の標準コントラクトの欠落しているキー部分に対して空のシーケンスを返すルックアップの動作ですか、ILookup<,>それともをスローする実装でもかまいませんKeyNotFoundExceptionRx実装はをスローしKeyNotFoundExceptionます。
ルカゾイド、2015

誰かを助ける場合:Dictionary<TKey, IEnumerable<TValue>>リストの辞書として説明できます。つまりToLookup()、リストの辞書をくれ。何らかの理由で、それを聞いたことがその方法を頭の中でまっすぐに理解するのに役立ちました。
ネイト・クック

-4

ToDictionaryは<TKey、TValue>ですが、ToLookup <TKey、T1、T2、T3、...>はIGroupingに似ていますが、列挙はメモリに残ります。


3
で何を説明しようとしているのかよくわかりませんT1, T2, T3, ...。ToLookupとToDictionary(メソッド自体)は、ほとんど同じAPIを持っています
Marc Gravell
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.