Apa perbedaan antara LINQ ToDictionary dan ToLookup? Mereka sepertinya melakukan hal yang sama.
Apa perbedaan antara LINQ ToDictionary dan ToLookup? Mereka sepertinya melakukan hal yang sama.
Jawaban:
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 melempar KeyNotFoundException
. The implementasi dalam Rx melempar KeyNotFoundException
.
Dictionary<TKey, IEnumerable<TValue>>
bisa digambarkan sebagai kamus daftar. Jadi ToLookup()
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.
T1, T2, T3, ...
; ToLookup dan ToDictionary (metodenya sendiri) memiliki API yang hampir sama