C#:从字典中检索符合条件的所有键

时间:2016-04-23 04:32:07

标签: c# dictionary pattern-matching iteration

.net 4.5.2

我的词典以这种方式定义:

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

它包含以下格式的键:

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

如何迭代我的字典中具有以下格式的所有键:

2016/4/*

5 个答案:

答案 0 :(得分:3)

我不知道你在String类型中使用日期而不是使用DateTime类型。

无论如何,要回答你的问题,只需使用像这样的StartsWith扩展方法:

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

答案 1 :(得分:1)

使用

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

答案 2 :(得分:0)

  

如何迭代字典中的所有键

您可以使用字典的Keys属性循环遍历每个Key

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

或者您也可以使用Linq

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

答案 3 :(得分:0)

如果密钥包含子字符串&#34; 2016/4 /&#34;您可以循环检查所有项目。并将密钥保存在另一个列表中。

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

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

答案 4 :(得分:0)

如果要使用指定的年份和月份过滤字典,则可以执行以下操作:

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);

这将为您提供包含2016/04的日期的过滤词典