2010-11-22 22 views
1

は、ポイントの集合(PointCollection)を持っているとしましょう。 私がしたいことは、これらの点の中でX座標とY座標の最小値を見つけることです。明らかにコレクションを反復し、座標を段階的にチェックすることができます。PointCollection(C#)のX座標とY座標の最小値

すばやく効率的なソリューションがあるのだろうかと思います。

ご意見はありますか?

ありがとうございました

+1

2点が必要ですか?最も低いXを持つものと最も低いYを持つもの、または最低の組み合わせのXとYを持つものの1つ。 –

+0

既にソートされていない限り、すべてを調べるよりも速いものはありません – smirkingman

答えて

4

速いタイプに?おそらく:

var xMin = points.Min(p => p.X); 
var yMin = points.Min(p => p.Y); 

しかし、それ単一foreachループよりも遅く実行されます:あなたがしたい場合

var lowestX = pointCollection.Min(p => p.X); 
var lowestY = pointCollection.Min(p => p.Y); 

を使用し、別々に最低xとyの位置を取得するために

bool first = true; 
foreach(var point in points) { 
    if(first) { 
     xMin = point.X; 
     yMin = point.Y; 
     first = false; 
    } else { 
     if(point.X < xMin) xMin = point.X; 
     if(point.Y < yMin) yMin = point.Y; 
    } 
} 
+0

私は最も速い解決策を探しています。なぜあなたは最初のものが遅くなると思いましたか? – Jamie

+1

また、このコードでは毎回必要がないかチェックしています。xminとyminをint.MaxValueに代入してからforeachを使い、ボディはちょうどelseブロックです –

+1

@HPT - @Jamie - なぜなら、これは一回ではなく二回ループするからです.b:LINQは最小公約数のアプローチで動作します。コレクションタイプに対して定義されたカスタムイテレータを使用することはできず、追加の委任呼び出しを行う必要があります。 –

1

をXとYの結合した位置が最も小さいものは

var lowest = pointCollection.Min(p => p.X + p.Y); 
+0

'Min'は' Point'ではありません... –

+0

Ops。私の答えで今修正されました。 –

関連する問題