Apa perbedaan antara LINQ ToDictionary dan ToLookup


123

Apa perbedaan antara LINQ ToDictionary dan ToLookup? Mereka sepertinya melakukan hal yang sama.

Jawaban:


176

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>>


5
Juga agak mirip dengan groupby?
Carlo V. Dango

7
Apakah perilaku pencarian yang mengembalikan urutan kosong untuk bagian kunci yang hilang dari kontrak standar ILookup<,>atau implementasi bebas untuk melempar KeyNotFoundException. The implementasi dalam Rx melempar KeyNotFoundException.
Lukazoid

Dalam hal itu membantu siapa pun: 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.
Nate Cook

-4

ToDictionary adalah <TKey, TValue> sedangkan ToLookup <TKey, T1, T2, T3, ...> mirip dengan IGrouping tetapi enumerasi tetap berada di memori.


3
Tidak begitu yakin apa yang Anda coba ilustrasikan dengan T1, T2, T3, ...; ToLookup dan ToDictionary (metodenya sendiri) memiliki API yang hampir sama
Marc Gravell
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.