我有Dictionary<string, object>
的列表。
如何按值在所有词典中查找重复值?
答案 0 :(得分:1)
将linq用于紧凑代码:
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
list.SelectMany(dictionary => dictionary.Values).GroupBy(d => d).Where(x => x.Count() >1);
答案 1 :(得分:1)
旧经典循环
var uniqueValues = new HashSet<object>();
var duplicateValues = new List<object>();
foreach (var value in yourDictionaries.SelectMany(dict => dict.Values))
{
if (uniqueValues.Add(value) == false)
{
duplicateValues.Add(value);
}
}
SelectMany
是获取所有词典的所有值的关键方法。
如果您是LINQ的粉丝,可以将其转换为LINQ表达式,例如使用Aggregate
或GroupBy
答案 2 :(得分:1)
您可以使用LINQ找到重复值及其出现次数。 它为您提供重复值及其出现次数(列表中的索引和字典中的键)。
var duplicates = dicList
.SelectMany((x, i) => x.Select(p => new { Index = i, Key = p.Key, Value = p.Value }))
.GroupBy(x => x.Value)
.Where(x => x.Count() > 1)
.Select(x => new
{
Value = x.First().Value,
Occurrences = x.Select(o => new { Index = o.Index, Key = o.Key })
});
如果您只想要重复值,请使用简化版
var duplicates = listOfDic
.SelectMany(x => x.Values)
.GroupBy(x => x)
.Where(x => x.Count() > 1);