Question

Je suis en train de trier une liste de points 2D d'abord par x coordonner et par y coordonner. Je mis en œuvre l'interface IComparer comme suit:

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;
        }

    }
}

Et puis appeler mon tri comme suit:

pointsList.Sort(new PointComparer());

Pour une raison quelconque la liste ne trie pas. Sûrement quelque chose de très simple et stupide, mais coincé sur ce point pour un certain temps .... TIA

Était-ce utile?

La solution

Cela devrait fonctionner mieux:

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;
    }

  }
}

Si les valeurs X sont différentes, il utilisera la valeur Y pour le tri. Ceci est différent de votre code, où les valeurs de X seront utilisées si les valeurs Y sont les mêmes.

Comme d'autres l'ont mentionné, si vous pouvez utiliser LINQ, vous devez utiliser les méthodes d'extension et de OrderBy ThenBy:

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

Autres conseils

Pouvez-vous pas utiliser OrderBy -> ThenBy

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

Pourquoi ne pas:

var sorted = pointsList.OrderBy(p => p.X)
                       .ThenBy(p => p.y)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top