は、ポイントの集合(PointCollection
)を持っているとしましょう。 私がしたいことは、これらの点の中でX座標とY座標の最小値を見つけることです。明らかにコレクションを反復し、座標を段階的にチェックすることができます。PointCollection(C#)のX座標とY座標の最小値
すばやく効率的なソリューションがあるのだろうかと思います。
ご意見はありますか?
ありがとうございました
は、ポイントの集合(PointCollection
)を持っているとしましょう。 私がしたいことは、これらの点の中でX座標とY座標の最小値を見つけることです。明らかにコレクションを反復し、座標を段階的にチェックすることができます。PointCollection(C#)のX座標とY座標の最小値
すばやく効率的なソリューションがあるのだろうかと思います。
ご意見はありますか?
ありがとうございました
速いタイプに?おそらく:
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;
}
}
私は最も速い解決策を探しています。なぜあなたは最初のものが遅くなると思いましたか? – Jamie
また、このコードでは毎回必要がないかチェックしています。xminとyminをint.MaxValueに代入してからforeachを使い、ボディはちょうどelseブロックです –
@HPT - @Jamie - なぜなら、これは一回ではなく二回ループするからです.b:LINQは最小公約数のアプローチで動作します。コレクションタイプに対して定義されたカスタムイテレータを使用することはできず、追加の委任呼び出しを行う必要があります。 –
をXとYの結合した位置が最も小さいものは
var lowest = pointCollection.Min(p => p.X + p.Y);
'Min'は' Point'ではありません... –
Ops。私の答えで今修正されました。 –
2点が必要ですか?最も低いXを持つものと最も低いYを持つもの、または最低の組み合わせのXとYを持つものの1つ。 –
既にソートされていない限り、すべてを調べるよりも速いものはありません – smirkingman