【问题标题】:Get Duplicates in List and Edit Item获取列表中的重复项并编辑项目
【发布时间】:2017-03-29 19:44:42
【问题描述】:

我需要获取列表中已存在的所有项目并编辑 BOTH 项目以包含重复属性。

我试图通过以下方式获得重复:

var duplicates = LIST.Select((t, i) => new { Index = i, Text = t }).GroupBy(g => g.Text.PROPERTYTOSEARCGBY).Where(g => g.Count() > 1);

但是,当我需要获取两条记录的索引以便我可以使用以下方法编辑它们时,这会返回重复的属性:

LIST[index1].FlaggedData = true;
LIST[index2].FlaggedData = true;
etc...

如何获取 BOTH 重复或多条记录的索引?

【问题讨论】:

  • 你已经按照你的要求做了——duplicates 的每个项目都是IGrouping,即包含共享相同密钥的项目的可枚举。

标签: c# .net arrays winforms list


【解决方案1】:

变量duplicates 是一个可以迭代的IGrouping。枚举中的每个元素都将是您定义的具有 2 个属性的匿名类型:IndexText

foreach (var grouping in duplicates)
{
    // This will contain the value that was grouped by:
    // - grouping.Key

    foreach (var pair in grouping)
    {
        // These properties are available
        //  - pair.Index
        //  - pair.Text

        // set the FlaggedData property
        pair.Text.FlaggedData = true;
    }
}

【讨论】:

  • 谢谢。这是我对正确使用分组的误解。
【解决方案2】:

您已经拥有正确的 LINQ 查询来执行您想要的操作。似乎您更新 Duplicate 标志的代码不正确。您应该使用如下代码来更新 Dupe 标志

foreach (var group in duplicates) {
    foreach (var item in group) {
        LIST[item.Index].FlaggedData = true;
    }
}

或者一些更简洁的代码,比如

foreach (var item in duplicates.SelectMany(item => item))
    item.Text.FlaggedData = true;

【讨论】:

    【解决方案3】:

    使用 SelectMany

    duplicates = LIST.Select((t, i) => new { Index = i, Text = t })
    .GroupBy(g => g.Text.PROPERTYTOSEARCGBY)
    .Where(g => g.Count() > 1)
    .SelectMany(g => g, (g, x) => x.Index);
    

    【讨论】:

      【解决方案4】:

      您不需要索引。 像您一样分组并自己选择项目就足够了。

      var duplicates = LIST.GroupBy(t => t.PROPERTYTOSEARCGBY)
                           .Where(g => g.Count() > 1)
                           .SelectMany(t=>t);
      
      foreach (var item in duplicates)
      {
          item.FlaggedData = true;
      }
      

      甚至更短:

      LIST.GroupBy(t => t.PROPERTYTOSEARCGBY)
          .Where(g => g.Count() > 1)
          .SelectMany(t=>t)
          .ToList()
          .ForEach(t=>t.FlaggedData = true);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-04
        • 1970-01-01
        • 1970-01-01
        • 2010-11-26
        • 1970-01-01
        • 2021-12-15
        • 2017-04-04
        相关资源
        最近更新 更多