我有一个字典列表。
List<Dictionary<String, String>> data = GetData();
字典包含名为“Month”的键,其值为“1/2010”等。我需要一个字典列表,其中包含出现在Dictionary-list中的所有不同月份。
答案 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);
}