【问题标题】:How to find duplicate values in List<Dictionary<string, object>>?如何在 List<Dictionary<string, object>> 中查找重复值?
【发布时间】:2023-03-15 19:55:01
【问题描述】:

我有一个Dictionary&lt;string, object&gt; 的列表。 如何按值在所有字典中查找重复值?

【问题讨论】:

标签: c# .net list dictionary duplicates


【解决方案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);

【讨论】:

    【解决方案2】:

    老经典循环

    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

    【讨论】:

      【解决方案3】:

      使用 linq 来压缩代码:

             List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
              list.SelectMany(dictionary => dictionary.Values).GroupBy(d => d).Where(x => x.Count() >1);
      

      【讨论】:

      • 这仅适用于一本字典。但不是列表。
      猜你喜欢
      • 2013-05-15
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多