2012-03-29 43 views
7

Bir sözlükte eklemek istediğim bir listeye sahibim, basitlik için eklenen değerler aynı olacak.C# İçindekiler ile ContainsKey onay

Bir foreach döngüsünü kullanabilirim. Yukarıdaki çalışmalar.

Ama şu şekilde aynı şeyi ToDictionary kullanmak istediğiniz - İki kez "Su" ekliyorum çünkü Tabii

Dictionary<string, int> myDictionary2 = list.ToDictionary(i => i, i => 1); 

bu başarısız olur.

ToDictionary kullanırken yinelenen girişleri denetlemenin doğru yolu nedir?

Sen çiftleri filtrelemek için Distinct() kullanabilirsiniz

cevap

14

:

Dictionary<string, int> myDictionary2 = list.Distinct().ToDictionary(i => i, i => 1); 

yinelenen anahtar kelimeler için "el" kontrol etmek gerekmez, çünkü çok fazla net geleneksel döngü yapacak aynı yaklaşım:

foreach (string value in list.Distinct()) 
{ 
    myDictionary.Add(value, 1); 
} 
+6

Bu işe yarayacak, ancak OP'nin gerçekten bir set isteyip istemediğini merak ediyorum. – Gabe

+0

@Gabe: Sorunuzun bağlamında yorumunuzu anlamadığımdan emin değilim - açıklığa kavuşabilir misiniz? – BrokenGlass

+1

Tüm değerlerin 1 olduğu bir sözlük aslında sadece bir kümedir. Kullanıcı hiçbir zaman değerlere erişmezse, gerçek bir sözlük gerekli değildir. – Gabe

7

Distinct, yinelenen anahtar sorununu önleyen bir seçenektir. Yinelenen sayımını gerekiyorsa aşağıdaki gibi, bu GroupBy gibi daha bir şey deneyebilirsiniz: uygulamanız sadece basit dize listesi/yinelenen-sayım yapı değildir

var dict = list.GroupBy(i => i).ToDictionary(g => g.Key, g => g.Count()); 

varsa, seçme bazı kilometre alabilirsiniz Lookup gibi farklı bir yapı, ToLookup uzantısını çağırmaktan - veya muhtemelen yukarıda kullanmış olduğum GroupBy gibi bir Gruplandırmaya gitmekten yararlanabilirsiniz.