gpt4 book ai didi

c# - 使用 HashSet 根据 T 的属性删除不在另一个集合中的项目

转载 作者:太空宇宙 更新时间:2023-11-03 22:44:56 31 4
gpt4 key购买 nike

我有 2 个包含不同对象的通用列表集合。我需要列表 1 来仅包含在另一个列表中找到该对象的属性的项。

目前,我正在实现这样的目标:

foreach (var product in navCat.Value.CategoryAssignment.ToArray())
{
if (!masterCatalog.Product.Any(p => p.ProductId == product.ProductId))
{
//this product doesn't exist in the master catalog so lets remove it
navCat.Value.CategoryAssignment.RemoveAll(p => p.ProductId == product.ProductId);
}
}

这很好用……但是速度很慢!更有效的方法是什么?我一直在调查 HashSet<T>但我不确定如何根据另一个列表的属性调用 Remove。

我如何在我的示例中使用 HashSet 来确保我的第二个列表只包含第一个列表中的产品?

最佳答案

您可能只需执行以下操作,至少这样您就不会遇到二次时间复杂度 O(n*n)

var masterIds = masterCatalog.Product.Select(x => x.ProductId).ToList();

navCat.Value.CategoryAssignment.RemoveAll(x => !masterIds.Contains(x.ProductId));

关于c# - 使用 HashSet 根据 T 的属性删除不在另一个集合中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50420730/

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