【发布时间】: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<T>.RemoveAll...和IEnumerable<T>.Any -
*
O(n*m)时间的总台* -
有许多不同的方法可以做到这一点。一种方法是提取您想要/不想要的 ID,然后过滤集合,例如
.Where(x => ids.Contains(x.ImageId))。或者您可以制作自定义比较器以传递给Except。 -
呵呵 ... 所以你认为真正的 OP 问题是这个异常?
标签: c# .net list foreach compare