LINQ ToDictionary ve ToLookup arasındaki fark nedir


123

LINQ ToDictionary ve ToLookup arasındaki fark nedir? Aynı şeyi yapıyor gibi görünüyorlar.

Yanıtlar:


176

Sözlük 1: 1 haritadır (her tuş tek bir değere eşlenir) ve bir sözlük, gerçeğin ardından değiştirilebilir (düzenlenebilir).

Bir arama 1: çok haritadır (çoklu harita; her anahtar IEnumerable<>bu anahtarla değerlerden birine eşlenir ) ve ILookup<,>arayüzde mutasyon yoktur .

Bir yan not olarak, var olmayan bir anahtarda bir arama (indeksleyici aracılığıyla) sorgulayabilir ve boş bir sıra alırsınız. Aynı şeyi bir sözlükle yapın ve bir istisna elde edersiniz.

Yani: her anahtarı paylaşan kaç kayıt var?

Aşırı derecede basitleştirilmiş bir bakış açısı Lookup<TKey,TValue>, a'nın kabaca birDictionary<TKey,IEnumerable<TValue>>


5
Ayrıca bir groupby'ye biraz benziyor mu?
Carlo V. Dango

7
Standart sözleşmenin eksik bir anahtar parçası için boş bir sıra döndüren bir aramanın davranışı mı yoksa ILookup<,>bir KeyNotFoundException. Rx uygulaması bir atar KeyNotFoundException.
Lukazoid

Herhangi birine yardımcı olması durumunda: Dictionary<TKey, IEnumerable<TValue>>bir liste sözlüğü olarak tanımlanabilir. Demek ToLookup()ki: bana bir liste sözlüğü ver. Bazı nedenlerden dolayı, bu şekilde tarif edildiğini duymak, kafamın içine girmeme yardımcı oldu.
Nate Cook

-4

ToDictionary <TKey, TValue> iken ToLookup <TKey, T1, T2, T3, ...> IGrouping'e benzer ancak numaralandırma bellekte kalır.


3
İle neyi göstermeye çalıştığınızdan tam olarak emin değilim T1, T2, T3, ...; ToLookup ve ToDictionary (yöntemlerin kendileri) hemen hemen aynı API'ye sahiptir
Marc Gravell
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.