gpt4 book ai didi

linq - 如何快速查找 List 中的重复项,并更新原始集合

转载 作者:行者123 更新时间:2023-12-04 17:29:13 24 4
gpt4 key购买 nike

首先让我说我已经阅读了这些问题:1 & 2 ,我知道我可以编写代码来查找列表中的重复项,但我的问题是我想更新原始列表而不仅仅是查询和打印重复项。

我知道我无法更新查询返回的集合,因为它不是 View ,而是匿名类型 IEnumerable<T> .

我希望能够在我的列表中找到重复项,并标记我创建的名为 State 的属性。稍后在应用程序中使用。

有没有人遇到过这个问题,你能指出我正确的方向吗?

附言我使用 ATM 的方法是一个冒泡排序类型循环,逐项遍历列表并比较关键字段。显然这不是最快的方法。

编辑:

为了将列表中的项目视为“重复”,必须匹配三个字段。我们将它们称为 Field1、Field2 和 Field3

我在比较这些字段的基类上有一个重载的 Equals() 方法。

我唯一一次跳过 MarkDuplicates() 中的对象方法是如果对象状态为 UNKNOWNERROR ,否则,我测试它。

如果您需要更多详细信息,请告诉我。

再次感谢!

最佳答案

我认为最简单的方法是首先编写一个扩展方法,该方法在对象列表中查找重复项。由于您是对象使用 .Equals() 它们可以在最常见的集合中进行比较。

public static IEnumerable<T> FindDuplicates<T>(this IEnumerable<T> enumerable) {
var hashset = new HashSet<T>();
foreach ( var cur in enumerable ) {
if ( !hashset.Add(cur) ) {
yield return cur;
}
}
}

现在应该很容易更新您的集合以获取重复项。例如
List<SomeType> list = GetTheList();
list
.FindDuplicates()
.ToList()
.ForEach(x => x.State = "DUPLICATE");

如果您已经在代码中定义了 ForEach 扩展方法,则可以避免使用 .ToList。

关于linq - 如何快速查找 List<T> 中的重复项,并更新原始集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/792333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com