2017-07-05 119 views
6

Bunun gibi bir Sözlükle arama yaparken bir sorunum var.Sözlük değerleri girin ve geri dönün Anahtar listesi toplantı koşulları

Dictionary<string, string[]> dic = new Dictionary<string, string[]>(){ 
    {"a", new string[](){"a_val","2"}}, 
    {"b", new string[](){"b_val","1"}}, 
    {"b", new string[](){"b_val","0"}} 
}; 

Ben stingArray [1] öğesinin değeri daha büyüktür Keys Listesini dönmek gerekiyor "1" gibi:

List<string> list = new List<string>{ 
    "a" 
}; 

kullanıyorum gerçekten iyi değilim LINQ, şu anki çözümüm sözlükte yineleniyor ve anahtarları yeni bir listeye ekliyor. Ama bu yöntem çirkin görünüyor ve ben problem için başka bir çözüm bulmaya çalışıyorum.

+0

Blk (**) için çift Asteriskler durmak yok bakabilirsiniz? –

+1

@CasparKleijne Uygulanmaz ** kalın ** biçimlendirme. –

+1

Bu dizini vurgulamak istedim, ancak bu kod biçiminde çalışmadı. Onu kaldıracağım. – McNade

cevap

11

: Where deyimi ile

var list = dic.Where(x => int.Parse(x.Value[1]) > 1) 
       .Select(x => x.Key) 
       .ToList(); 

girişleri nerede Value[1] Daha büyük olan 1 filtrelenecek ve Select bildirimi ile bu girdilerden anahtar seçilecektir. En azından koleksiyon, ToList yöntemiyle List biçiminde dönüştürülecektir. Ayrıntılı bilgi için

101 LINQ Samples in C#

+0

düşünebilirsiniz. Teşekkür ederim, mükemmel çalışıyor ve bu örnekler harika. – McNade

+1

Hoşgeldiniz :-) –

+1

@MightyBadaboom Siz de hoş geldiniz ;-) –

3

deneyin bu (Sen sözlük tanım bazı derleme hatalar var ve bazı tahminde bulunduğumuz konum): Herhangi bir hata işleme olmadan

 static void Main(string[] args) 
    { 
     var dic = new Dictionary<string, string[]>(){ 
     {"a", new string[]{"a_val","2"}}, 
     {"b", new string[]{ "b_val","1"}}, 
     {"c", new string[]{ "b_val","0"}}}; 
     string[] expected = dic 
      .Where(kv => Convert.ToInt32(kv.Value[1]) > 1) 
      .Select(kv => kv.Key).ToArray(); 
    }