2013-01-03 20 views
9

tüm anahtarları alın bu var:sözlük içeren değeri x

Dictionary<integer, string> dict = new Dictionary<integer, string>(); 

ben değerini abc ihtiva sözlükte tüm öğeleri seçmek istiyorum.

Bunu kolayca yapmamı sağlayan dahili bir işlev var mı?

cevap

28

Eh o LINQ ile makul basit: Bu hatta biraz verimli olmayacaktır

var matches = dict.Where(pair => pair.Value == "abc") 
        .Select(pair => pair.Key); 

Not o - her girdiyi kontrol etmek ihtiyacı olarak, bir O(N) operasyon.

sık bunu yapmak gerekiyorsa, başka bir veri yapısını kullanarak düşünebilirsiniz - Dictionary<,> özellikle anahtar tarafından hızlı aramalar için tasarlanmıştır.

+0

kullanarak yineleme etmektir. Burada (pair => pair.Value.Contains ("abc")) .Select (pair => pair.Key); – jmrnet

+0

@ Kullanıcı: 'Sözlük <,>' sadece Sözlük 'için kısaltılmıştır. Sözlüğün ne kadar büyük? Aranacak kaç değer var? Saniyede bir kez çok sık değilse, eğer oldukça küçük bir sözlükse ve sadece tek bir değer arıyorsanız ... –

+0

Sözlükün kapasitesi 10 anahtar ve 4 değerdir ("Sol", "Sağ", "Ön" ,"Geri"). Ve bazen fonksiyon saniyede yaklaşık 10 kez çalışır. – Elmo

0

Yerleşik işlev? var maçları = dicti: Özür Hayır ... ama başka (o kadar güzel değil) yolu "abc" da olabilir içeren bir değere sahip anahtarlarını almak istiyorsanız Yapabilirsin foreach(KeyValuePair<integer, string> ...

İlgili konular