C# 从一个 IEnumerable 中删除另一个 IEnumerable 中的对象
我有一个主要的 IEnumerable 集合 和另一个较小的集合,其中包含较大集合中的一些重复项,
IEnumerable<T> all_objects ;
IEnumerable<T> some_of_the_objects ;
我正在寻找一种“更好看”的方法来从 some_of_the_objects 中删除所有对象 来自 all_objects ,而不必循环遍历较小的集合。
foreach(T _object in some_of_the_objects)
{
all_objects.Remove(_object);
}
I've got a main IEnumerable collection
and another smaller collection which contains some duplicates from the larger collection,
IEnumerable<T> all_objects ;
IEnumerable<T> some_of_the_objects ;
I'm looking for a "better looking" way to remove all the objects from some_of_the_objects
from all_objects , without having to loop through the smaller collection.
foreach(T _object in some_of_the_objects)
{
all_objects.Remove(_object);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
伊万的回答是正确的;首先,您可能需要一个自制的相等比较器,除非重复项实际上是对同一对象的另一个引用。但是,如果您有一个唯一性单元(ID、名称、某些属性组合),则可以将该函数作为谓词传递给 .Except,并根据需要对列表进行重复数据删除。
Ivan's answer is on the right track; first you might need a home grown equality comparer unless a duplicate is literally another reference to the same object. But if you have a unit of uniqueness (ID, name, some combination of properties), you could pass that func as a predicate to .Except and have the list de-duplicated as you wish.