2Dポイントリストを並べ替えます(最初はx、次にy)
-
04-10-2019 - |
質問
最初にX Coordinate、次にY Coordineによって2Dポイントのリストを並べ替えようとしています。次のようにicomparerインターフェイスを実装しました。
class PointComparer : IComparer<Point>
{
public int Compare(Point x, Point y)
{
if (x.Y != y.Y)
{
return x.Y - y.Y;
}
else
{
return x.X - y.X;
}
}
}
そして、次のように私のソートを呼び出します:
pointsList.Sort(new PointComparer());
何らかの理由で、リストは並べ替えられません。確かに非常にシンプルで愚かなものですが、かなり長い間これに固執しています....ティア
解決
これはよりうまく機能するはずです:
class PointComparer : IComparer<Point>
{
public int Compare(Point first, Point second)
{
if (first.X == second.X)
{
return first.Y - second.Y;
}
else
{
return first.X - second.X;
}
}
}
x値が異なる場合、ソートにy値を使用します。これは、y値が同じ場合、x値が使用されるコードとは異なります。
他の人が述べたように、LINQを使用できる場合は、 OrderBy
と ThenBy
拡張方法:
pointsList.OrderBy(p => p.X).ThenBy(p => p.y)
他のヒント
Orderby->それ以降は使用できませんか?
なぜだめですか:
var sorted = pointsList.OrderBy(p => p.X)
.ThenBy(p => p.y)
所属していません StackOverflow