2011-08-03 8 views
2

私は、単純な構造体があります。.Min拡張メソッドからオブジェクトを取得する方法?

考える
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」の代わりに返さ入手できますか?

+0

を使用すると、最小の座標は何を考えていますか? –

+0

'Coord'のminをどのように定義しますか? –

+0

最小の座標を定義しますか? (100,1)対(1,100)は小さいですか?それとも同じですか? – leppie

答えて

3

残念なことに、単純なLINQ to Objectではこれを非常に簡単に行うことはできません。あなたは最小値とを見つけることができましたその値を持ってCoordを見つけるが、明らかにそれはデータを2回上に行くことを意味します。

私はあなたがが使用できMoreLINQMinBy方法があります:

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

アイデアが気に入ったsource.ThrowIfNull( "source"); – hungryMind

+0

普通のノッチ: – IAbstract

0

別のエレガント未満の答え:

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

かなりのリストを扱う場合、 'coords.Min(y => array [y.Row、y.Col])'をキャッシュするべきです。 – leppie

関連する問題