使用字典<string,string =“”> </string,>列表中的某个键获取所有不同的值

时间:2011-09-08 13:34:55

标签: c# dictionary

我有一个字典列表。

List<Dictionary<String, String>> data = GetData();

字典包含名为“Month”的键,其值为“1/2010”等。我需要一个字典列表,其中包含出现在Dictionary-list中的所有不同月份。

3 个答案:

答案 0 :(得分:3)

简单使用LINQ:

var months = data.Select(dict => dict["Month"]).Distinct().ToList();

或者如果不是所有的词典都有条目:

var months = data.Select(dict => {
                            string value;
                            bool hasValue = dict.TryGetValue("Month", out value);
                            return new { value, hasValue };
                         })
                 .Where(p => p.hasValue)
                 .Select(p => p.value)
                 .Distinct()
                 .ToList();

编辑:我的原始版本未包含Distinct电话,因此它会包含重复项。它现在不会。

答案 1 :(得分:1)

或者,如果你想要一个单行(产生不同的值,并且如果不是所有词典都有条目仍然有效)

var result=data.SelectMany(x => x)
   .ToLookup(kv => kv.Key, kv => kv.Value)["Month"].Distinct().ToList();

答案 2 :(得分:0)

如果你不能使用LINQ:

List<string> months = new List<string>();
foreach (Dictionary<string, string> aDict in data)
{
    string aMonth;
    if (aDict.TryGetValue("Month", out aMonth))
        months.Add(aMonth);
}

编辑:

如果您不想要重复:

List<string> months = new List<string>();
foreach (Dictionary<string, string> aDict in data)
{
    string aMonth;
    if (aDict.TryGetValue("Month", out aMonth) && !months.Contains(aMonth))
        months.Add(aMonth);
}