c# - 以高效的方式过滤 2 个列表
问题描述
我有 2 个列表:
newUpdates
和updatesToAdd
我首先需要通过他们的 IDupdatesToAdd
从列表中删除所有出现的 。newUpdates
然后我需要将所有内容添加updatesToAdd
回newUpdates
以防止重复。
可能不清楚我为什么要这样做,但我需要换出多次出现的具有相同 ID(不同更新类型)的项目,然后为该 Id 重新插入一个项目,其中包含主/主/捕获所有更新类型。
到目前为止,我的代码就是这样做的,但运行速度非常慢。有没有更高效的方法来写这个?
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);
我试着做:
newUpdates.Union(updatesToAdd).ToList();
但是,我的列表中仍然存在重复项。
解决方案
为什么不使用 except 呢? https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.except?view=netframework-4.7.2
或包含为假。
事实上,我认为你有一个错误。我想你想这样做:
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);
推荐阅读
- swift - Index out of range when removing value from array
- java - 如何从 Junit 测试中调用依赖项
- c# - Unity中的Perlin函数产生小范围的相同数字
- r - 在 R 中的数据表中按值拆分列
- javascript - 在javascript中呈现用户的输出
- java - 如何在java中实现正确的完全对齐?
- python - 在关闭跟踪器的 Python 乌龟中,有没有办法在不使用 screen.update() 的情况下更新屏幕?
- reactjs - 使用 react-app-rewired-alias 进行 React 生产
- javascript - 在 Rails 6 中使用 js.erb 文件更改 HTML 元素的内容
- javascript - 如何设计一个函数,以便它为每个按钮单击做不同的事情