首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以高性能的方式过滤2个列表

以高性能的方式过滤2个列表
EN

Stack Overflow用户
提问于 2018-11-23 01:13:52
回答 1查看 51关注 0票数 0

我有两个列表:

newUpdatesupdatesToAdd

我首先需要按Id从newUpdates列表中删除所有出现的updatesToAdd。然后我需要将所有的updatesToAdd重新添加到newUpdates中以防止重复。

可能不清楚我为什么要这样做,但是我需要换出多次出现的共享相同Id的项(不同的更新类型),然后使用main/master/catch all更新类型重新插入该Id的一个项。

到目前为止,我拥有的代码可以做到这一点,但它的运行速度非常慢。有没有更好的方式来写这篇文章呢?

代码语言:javascript
运行
复制
    var newUpdates = new List<Entity>();
    var updatesToAdd = new List<Entity>();

    var Ids = updatesToAdd.Select(x => x.Id).ToList();
    newUpdates.RemoveAll(x => Ids.Contains(x.Id));
    newUpdates.AddRange(updatesToAdd);

我试着这样做:

代码语言:javascript
运行
复制
    newUpdates.Union(updatesToAdd).ToList();

然而,我仍然在我的列表中得到了重复的结果。

EN

回答 1

Stack Overflow用户

发布于 2018-11-23 01:24:34

为什么不使用Except呢?https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.except?view=netframework-4.7.2

或Contains为假。

事实上,我认为你有一个bug。我认为你想这么做:

代码语言:javascript
运行
复制
var newUpdates = new List<Entity>(); //overall list to add
var updatesToAdd = new List<Entity>();  //later list to add

var Ids = updatesToAdd.Select(x => x.Id).ToList();  //this line chagned
newUpdates.RemoveAll(x => Ids.Contains(x.Id));
newUpdates.AddRange(updatesToAdd);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53435683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档