2

最初にx座標で、次にy座標で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());

何らかの理由でリストがソートされません。確かに非常に単純でばかげたものですが、かなり長い間これに固執していました.... TIA

4

3 に答える 3

6

これはうまくいくはずです:

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を使用できる場合は、拡張メソッドOrderByThenBy拡張メソッドを使用する必要があります。

pointsList.OrderBy(p => p.X).ThenBy(p => p.y)
于 2010-05-08T15:13:39.873 に答える
1

OrderBy-> ThenByを使用できませんか?

http://msdn.microsoft.com/en-us/library/bb534743.aspx

于 2010-05-08T15:08:48.163 に答える
0

なぜだめですか:

var sorted = pointsList.OrderBy(p => p.X)
                       .ThenBy(p => p.y)
于 2010-05-08T15:15:34.330 に答える