C# 从一个 IEnumerable 中删除另一个 IEnumerable 中的对象

发布于 2024-11-26 09:42:46 字数 361 浏览 0 评论 0原文

我有一个主要的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黯然 2024-12-03 09:42:46
all_objects = all_objects.Except(some_of_the_objects);
all_objects = all_objects.Except(some_of_the_objects);
鸠魁 2024-12-03 09:42:46

伊万的回答是正确的;首先,您可能需要一个自制的相等比较器,除非重复项实际上是对同一对象的另一个引用。但是,如果您有一个唯一性单元(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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文