2013-04-01 12 views
7

Jest to słownik,Jak znaleźć parę wartości klucza w słowniku o wartościach> 0 za pomocą klucza pasującego do określonego wzorca ciągu?

Dictionary<string, uint> oSomeDictionary = new Dictionary<string, uint>(); 

oSomeDictionary.Add("dart1",1); 
oSomeDictionary.Add("card2",1); 
oSomeDictionary.Add("dart3",2); 
oSomeDictionary.Add("card4",0); 
oSomeDictionary.Add("dart5",3); 
oSomeDictionary.Add("card6",1); 
oSomeDictionary.Add("card7",0); 

Jak zdobyć par klucz/wartość z oSomeDictionary z kluczami, który zaczyna się ciągiem „karty” i ma wartość większą niż zero?

Odpowiedz

10
var result = oSomeDictionary.Where(r=> r.Key.StartsWith("card") && r.Value > 0); 

wyjścia:

foreach (var item in result) 
{ 
    Console.WriteLine("Key: {0}, Value: {1}", item.Key, item.Value); 
} 

wyjściowa:

Key: card2, Value: 1 
Key: card6, Value: 1 

Pamiętaj inlcude using System.Linq

+1

Najszybsza odpowiednia odpowiedź! +1 –

3

Można użyć Enumerable.Where filtrować następnie elementy słownika

var result = oSomeDictionary.Where(c=>c.Key.StartsWith("card") && c.Value > 0) 
1

Dictionary realizuje <IEnumerable<KeyValuePair<TKey,TValue>>, dzięki czemu można wykonać iterację to za pomocą prostych metod rozszerzeń LINQ

var pairs = oSomeDictionary.Where(pair => pair.Key.StartsWith("card") && 
              pair.Value > 0); 

Console.WriteLine (string.Join(Environment.NewLine, pairs)); 

drukuje:

[card2, 1] 
[card6, 1] 
2

Można używać IEnumerable.Where() i String.StartsWith() metod, takich jak;

Dictionary<string, uint> oSomeDictionary = new Dictionary<string, uint>(); 

oSomeDictionary.Add("dart1", 1); 
oSomeDictionary.Add("card2", 1); 
oSomeDictionary.Add("dart3", 2); 
oSomeDictionary.Add("card4", 0); 
oSomeDictionary.Add("dart5", 3); 
oSomeDictionary.Add("card6", 1); 
oSomeDictionary.Add("card7", 0); 

var yourlist = oSomeDictionary.Where(n => n.Key.StartsWith("card") && n.Value > 0); 

foreach (var i in yourlist) 
{ 
    Console.WriteLine("Key: {0}, Value: {1}", i.Key, i.Value); 
} 

wyjściowe będą:

Key: card2, Value: 1 
Key: card6, Value: 1 

Oto DEMO.

2
class Program 
    { 
     private static void Main(string[] args) 
     { 
      Dictionary<string, uint> oSomeDictionary = new Dictionary<string, uint>(); 

      oSomeDictionary.Add("dart1", 1); 
      oSomeDictionary.Add("card2", 1); 
      oSomeDictionary.Add("dart3", 2); 
      oSomeDictionary.Add("card4", 0); 
      oSomeDictionary.Add("dart5", 3); 
      oSomeDictionary.Add("card6", 1); 
      oSomeDictionary.Add("card7", 0); 

      var result = oSomeDictionary.Where(pair => pair.Key.StartsWith("card") && pair.Value > 0); 
      foreach (var kvp in result) 
      { 
       Console.WriteLine("{0} : {1}",kvp.Key,kvp.Value); 
      } 
      Console.ReadLine(); 
     } 
    } 

Pełny działający kod powyżej.

Powiązane problemy