C# 获取列表中的重复项并编辑项目
我需要获取列表中已存在的任何项目,并编辑两个项目,以包含重复属性 我尝试通过执行以下操作来获取副本:C# 获取列表中的重复项并编辑项目,c#,.net,arrays,winforms,list,C#,.net,Arrays,Winforms,List,我需要获取列表中已存在的任何项目,并编辑两个项目,以包含重复属性 我尝试通过执行以下操作来获取副本: var duplicates = LIST.Select((t, i) => new { Index = i, Text = t }).GroupBy(g => g.Text.PROPERTYTOSEARCGBY).Where(g => g.Count() > 1); 但是,当我需要获取两条记录的索引以便可以使用以下方法编辑它们时,这会返回重复的属性: LIST[ind
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...
如何获取重复记录或多个记录的索引?变量
duplicates
是一个可以迭代的I分组。枚举中的每个元素都将是匿名类型,您将其定义为具有两个属性:Index
和Text
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;
}
}
使用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);
您已经有了正确的LINQ查询来执行所需的操作。似乎您更新replicate
标志的代码不正确。您应该使用如下代码来更新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;
你不需要索引。
只需按您所做的方式分组并自行选择项目即可
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);
您已经做了您要求的-重复的的每个项目都是i分组
,即包含共享同一密钥的项目的可枚举项。谢谢。这是我对正确使用分组的误解。