2011-04-14 14 views

cevap

140

Sözlük, bir 1: 1 haritasıdır (her anahtar tek bir değere eşlenir) ve bir sözlük gerekten sonra değiştirilebilir (düzenlenebilir).

Arama, 1: birçok harita (çoklu harita; her anahtar, o anahtardaki değerlerin IEnumerable<> ile eşleştirilir) ve ILookup<,> arabiriminde hiçbir değişiklik yoktur.

Bir yan not olarak, bir aramayı (dizinleyici aracılığıyla) var olmayan bir anahtarda sorgulayabilirsiniz ve boş bir sıra elde edersiniz. Bir sözlükle aynısını yapın ve bir istisna alacaksınız.

Peki: her anahtar kaç kayıt paylaşır? O bakmanın

bir aşırı basitleştirilmiş bir yol Lookup<TKey,TValue> bir Dictionary<TKey,IEnumerable<TValue>>

+4

Ayrıca bir grup için biraz benzer? –

+1

Biraz, aslında. –

+19

@Carlo: Evet, GroupBy'ye oldukça benziyor - GroupBy'nin tembel olması dışında, ToLookup ise hevesli. Olası bir uygulama için http://msmvps.com/blogs/jon_skeet/archive/2011/01/01/reimplementing-linq-to-objects-part-21-groupby.aspx adresine bakın. –

-4

ToDictionary için kabaca karşılaştırılabilir olmasıdır olduğunu < TKey, TValue> iken ToLookup < TKey, T1, T2, T3, ...> Gruplama ile aynıdır ancak numaralandırma hafızada kalır.

+2

"T1, T2, T3, ..." ile göstermeye çalıştığınız şeyden tam olarak emin değilsiniz; ToLookup ve ToDictionary (yöntemlerin kendileri) hemen hemen aynı API'ye sahiptir –