如何在c#中返回最小谓词中的对象

本文关键字:谓词 对象 返回 | 更新日期: 2023-09-27 18:06:22

在c#中,我有以下代码

Pixel topLeft = potentialTopLeft.Min(p => p.GetX());

获取列表potentialTopLeft中最小的Pixel对象,但它用来比较Pixel值的是GetX()类方法的值。但问题是,它返回最小GetX()的值,而我想要具有最小GetX()的Pixel对象。有人知道怎么修吗?

如何在c#中返回最小谓词中的对象

应用Sort,然后从IOrderedList中取出第一个元素:

var topLeft = potentialTopLeft.OrderBy(p => p.GetX()).FirstOrDefault();

您不需要对整个列表排序以找到X最小的Pixel,这会增加您的代码复杂性。您可以简单地使用:

var minX = potentialTopLeft.Min(p => p.GetX());
Pixel topLeft = potentialTopLeft.First(p => p.GetX() == minX);

或者您可以让Pixel实现IComparable<Pixel>,并提供一个快速的CompareTo方法实现,如下所示:

class Pixel : IComparable<Pixel>
{
    public int X { get; set; }
    int IComparable<Pixel>.CompareTo(Pixel other)
    {
        if (other.X > this.X) { return -1; }
        else if (other.X == this.X) { return 0; }
        else {return 1; }
    }
}

现在你可以使用Min方法:

Pixel topLeft = potentialTopLeft.Min();

这种方法的好处是它使您的调用代码更具可读性,如果您在代码中有其他需要比较Pixel实例的地方,您可以使用它。