如何从.min扩展方法中获取对象

本文关键字:获取 取对象 方法 扩展 min | 更新日期: 2023-09-27 18:04:18

我有一个简单的结构体:

public struct Coord
{
    public Coord (int Row, int Column )
    { /* set values */ }
    public int Row { get; }
    public int Column { get; }
}
给定

:

int [ , ] myArray;
IEnumerable<Coord> myCoords;  

我想选择具有最小值的坐标并返回该坐标。我可以得到最小的值:

int val = myCoords.Min(c => myArray[c.Row, c.Col]);

我怎样才能得到'Coord'代替返回?

如何从.min扩展方法中获取对象

不幸的是,在普通的LINQ to Objects中不能很容易地做到这一点。你可以找到最小值,然后,然后找到具有该值的Coord,但显然这意味着要遍历两次数据。

我在MoreLINQ中有一个MinBy方法,您可以使用:

Coord minCoord = myCoords.MinBy(c => myArray[c.Row, c.Col]);

另一个不太优雅的答案:

coords.Single( x => array[x.Row, x.Col] == coords.Min(y => array[y.Row,y.Col]));