Apa perbedaan antara LINQ ToDictionary dan ToLookup? Mereka sepertinya melakukan hal yang sama.
123
Kamus adalah peta 1: 1 (setiap kunci dipetakan ke satu nilai), dan kamus bisa berubah (dapat diedit) setelah fakta.
Pencarian adalah peta 1: banyak (multi-peta; setiap kunci dipetakan ke salah IEnumerable<>
satu nilai dengan kunci itu), dan tidak ada mutasi pada ILookup<,>
antarmuka.
Sebagai catatan tambahan, Anda dapat meminta pencarian (melalui pengindeks) pada kunci yang tidak ada, dan Anda akan mendapatkan urutan kosong. Lakukan hal yang sama dengan kamus dan Anda akan mendapatkan pengecualian.
Jadi: berapa banyak record yang berbagi setiap kunci?
Cara pandang yang terlalu disederhanakan adalah bahwa a kiraLookup<TKey,TValue>
- kira sebanding dengan aDictionary<TKey,IEnumerable<TValue>>
ILookup<,>
atau implementasi bebas untuk melemparKeyNotFoundException
. The implementasi dalam Rx melemparKeyNotFoundException
.Dictionary<TKey, IEnumerable<TValue>>
bisa digambarkan sebagai kamus daftar. JadiToLookup()
seperti mengatakan: beri saya kamus daftar. Untuk beberapa alasan mendengarnya dijelaskan seperti itu membantu saya meluruskannya di kepala saya.ToDictionary adalah <TKey, TValue> sedangkan ToLookup <TKey, T1, T2, T3, ...> mirip dengan IGrouping tetapi enumerasi tetap berada di memori.
sumber
T1, T2, T3, ...
; ToLookup dan ToDictionary (metodenya sendiri) memiliki API yang hampir sama