質問

最初に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を使用できる場合は、 OrderByThenBy 拡張方法:

pointsList.OrderBy(p => p.X).ThenBy(p => p.y)

他のヒント

Orderby->それ以降は使用できませんか?

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

なぜだめですか:

var sorted = pointsList.OrderBy(p => p.X)
                       .ThenBy(p => p.y)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top