如何在List <dictionary <string,object =“”>&gt;?中查找重复值

时间:2017-03-06 06:44:32

标签: c# .net list dictionary duplicates

我有Dictionary<string, object>的列表。 如何按值在所有词典中查找重复值?

3 个答案:

答案 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表达式,例如使用AggregateGroupBy

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