如何从.Min扩展方法获取对象?

时间:2011-08-03 13:23:25

标签: c# linq

我有一个简单的结构:

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'回来?

2 个答案:

答案 0 :(得分:3)

不幸的是,在简单的LINQ to Objects中你不能很容易地做到这一点。您可以找到最小值,然后找到具有该值的Coord,但显然这意味着将数据重复两次。

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

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

答案 1 :(得分:0)

另一个不太优雅的答案:

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