回答:
辞書は1対1のマップ(各キーは単一の値にマップされます)であり、事後に辞書は変更可能(編集可能)です。
ルックアップは1:多くのマップ(マルチマップ。各キーはIEnumerable<>
そのキーを持つ値の1つにマップされます)であり、ILookup<,>
インターフェースに変更はありません。
補足として、存在しないキーで(インデクサーを介して)ルックアップをクエリすると、空のシーケンスが取得されます。辞書でも同じことをすると例外が発生します。
では、各キーを共有するレコードはいくつですか?
非常に単純化された見方は、a Lookup<TKey,TValue>
はa にほぼ匹敵するということです。Dictionary<TKey,IEnumerable<TValue>>
ILookup<,>
それともをスローする実装でもかまいませんKeyNotFoundException
。Rxの実装はをスローしKeyNotFoundException
ます。
Dictionary<TKey, IEnumerable<TValue>>
リストの辞書として説明できます。つまりToLookup()
、リストの辞書をくれ。何らかの理由で、それを聞いたことがその方法を頭の中でまっすぐに理解するのに役立ちました。
ToDictionaryは<TKey、TValue>ですが、ToLookup <TKey、T1、T2、T3、...>はIGroupingに似ていますが、列挙はメモリに残ります。
T1, T2, T3, ...
。ToLookupとToDictionary(メソッド自体)は、ほとんど同じAPIを持っています