2016-04-23 4 views
1

.net entsprechen 4.5.2C#: Rufen Sie alle Schlüssel aus einem Wörterbuch, das ein Kriterium

Mein Wörterbuch auf diese Weise definiert ist:

Dictionary<string, string> Dates = new Dictionary<string, string>(); 

und es enthält Schlüssel in diesem Format:

2016/4/23 
2016/4/24 
2016/4/25 
2016/4/26 
2016/3/1 
2016/3/2 

Wie kann ich iterieren alle Schlüssel in meinem Wörterbuch, das dieses Format haben:

2016/4/* 
+0

Es wird groß sein, wenn Sie einen Code schreiben, die u versucht haben. – Manish

+0

Sie können 'foreach (var Schlüssel in Dates.Keys)' –

+0

Ja, ich kann das tun, aber ich bin auf der Suche nach einigen Funktionen in C#, die für diese Situationen verwendet werden könnten. Etwas wie LINQ zum selektiven Suchen und Abgleichen – wiki

Antwort

3

Ich weiß nicht, was Sie Datumsangaben in String-Typ anstelle von DateTime-Typ verwenden.

Wie auch immer, um Ihre Frage zu beantworten nur Startserweiterungsmethoden wie folgt verwenden:

var aprilMonthKeys = Dates.Keys.Where(k => k.StartsWith("2016/4/")); 
0

Wie kann ich iterieren alle Schlüssel in meinem Wörterbuch

Sie Keys Eigenschaft des Wörterbuchs Schleife durch jede Key nutzen könnten.

foreach(string key in Dates.Keys) 
{ 
    var date = DateTime.ParseExact(key, "yyyy/M/d", null); 
    if(date.Year == 2016 && date.Month == 4) 
    { 
     // logic 
    } 
} 

Alternativ können Sie auch Linq

var filtered = dictionary.Keys.Where(k=> 
    {   
     var date = DateTime.ParseExact(k, "yyyy/M/d", null);    
     return date.Year == 2016 && date.Month == 4; 
    }); 
0

Sie könnten nur Schleife durch alle Elemente Überprüfung verwenden, wenn der Schlüssel den Teil „2016/4 /“ enthält und die Schlüssel in einer anderen Liste speichern.

List<string> keys= new List<string>(); 

foreach(var item in Dates) 
{ 
    if (item.Key.Contains("2016/4/") 
     keys.Add(item.Key); 
} 
0

Wenn Sie das Wörterbuch mit dem angegebenen Jahr und Monat filtern möchten, dann können Sie tun:

var filteredDates = Dates.Where(d => 
       DateTime.ParseExact(d.Key, "yyyy/MM/dd", CultureInfo.InvariantCulture).Year == 2016 && 
       DateTime.ParseExact(d.Key, "yyyy/MM/dd", CultureInfo.InvariantCulture).Month == 4).ToDictionary(d=>d.Key); 

Dies wird Ihnen gefiltert Wörterbuch ergeben, die Tage für 2016/04

1

Verwenden

foreach(var record in Dates.Where(r => r.Key.Contains("2016/4/"))) 
{ 
    // Do something..... 
}