【问题标题】:how to compare two different object lists?如何比较两个不同的对象列表?
【发布时间】:2022-11-17 22:31:32
【问题描述】:

我有这两个列表:

List<image> ImagesByPerimeterId
List<PerimeterTile> ImagesWithMorePerimeters

上下文如下: 我想从 ImagesByPerimeterId 列表中删除包含在 ImagesWithMorePerimeters 列表中找到的 ID 的图像。 ImagesWithMorePerimeters 列表有一个 imageId 属性来与第一个进行比较。

我已经实现了这个逻辑,并且效果很好:

foreach(var i in ImagesByPerimeterId) 
{
  foreach(var j in ImagesWithMorePerimeters) 
  {
    if (i.Id == j.ImageId) 
    {
      ImagesByPerimeterId.Remove(i);
    }
  }
}

但我正在寻找一种更简单的方法来比较这些列表。有什么建议么?

我尝试使用list.Except(),但由于列表是不同的对象,所以没有成功

【问题讨论】:

  • List&lt;T&gt;.RemoveAll ...和IEnumerable&lt;T&gt;.Any
  • *O(n*m)时间的总台*
  • 有许多不同的方法可以做到这一点。一种方法是提取您想要/不想要的 ID,然后过滤集合,例如 .Where(x =&gt; ids.Contains(x.ImageId))。或者您可以制作自定义比较器以传递给Except
  • 呵呵 ... 所以你认为真正的 OP 问题是这个异常?

标签: c# .net list foreach compare


【解决方案1】:

您可以这样做,result 将是ImageId 的列表

var result = ImagesByPerimeterId.Select(i => i.ImageId).
Except(ImagesWithMorePerimeters.Select(j => j.ImageId)).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多