2014-09-03 4 views
-1

J'essaie de trier une liste (cette classe Point3D est une bibliothèque Rhino). Je veux avoir les points avec le plus petit X avant, mais je dois trier ce point par le plus petit Y si elles ont le même X. Par exemple, j'ai:Tri d'une liste de points C#

Point 1: X = 2; Y = 1 
Point 2: X = 4; Y = 2 
Point 3: X = 4; Y = 1 
Point 4: X = 3; Y = 8 
Point 5: X = 2; Y = 6 
Point 6: X = 2; Y = 4 

L'ordre que je veux avoir est que:

Point 1: X = 2; Y = 1 
Point 6: X = 2; Y = 4 
Point 5: X = 2; Y = 6 
Point 4: X = 3; Y = 8 
Point 3: X = 4; Y = 1 
Point 2: X = 4; Y = 2 

-je utiliser ce code simple:

myPointList.sort(); 

Mais j'ai un ordre que ce n'est pas correct, parce que je dois supprimer certains de ces points, et si elles ont l'ordre Je veux, je rase les points corrects mais j'enlève les bons que je ne veux pas effacer.

Quelqu'un peut-il m'aider, s'il vous plaît?

Merci beaucoup!

+0

Pourquoi les votes négatifs? – Alex

+0

http://stackoverflow.com/questions/3163922/sort-a-custom-class-listt –

+0

Pour référence future - les downvotes sont probablement dues à un très large "ordre n'est pas correct" et au manque d'efforts de recherche comme http: // www.bing.com/search?q=c%23+sort+list+two+properties ... –

Répondre

2

Utilisation Linq:

Points.OrderBy(p => p.X).ThenBy(p => p.Y) 
+0

qu'est-ce que p? J'ai seulement ma liste ... Devrais-je avoir quelque chose comme PointList.OrderBy (PointList => PointList [i] .X) .ThenBy (PointList => PointList [i] .Y)? – Imrik

+0

p est un nom de variable à l'intérieur de l'expression lambda, donc son nom n'a pas vraiment d'importance tant qu'il est unique. Vous pouvez vous référer à "p" comme si vous regardiez Point3d seul, donc vous pouvez accéder directement à ses propriétés. –

+0

N'oubliez pas d'ajouter en utilisant System.Linq; –

1

Vous devrez peut-être modifier cette légèrement, mais l'idée est de commander par x alors y

var sortedList = PointList.OrderBy(p => p.X) 
          .ThenBy(p => p.Y) 
          .ToList(); 
+0

pouvez-vous me dire ce qui est p? désolé – Imrik

+0

@Imrik - Le p représente juste un point pour l'expression lambda, c'est un peu comme une variable temporaire – Sayse

0

vous devez mettre en place un comparateur personnalisé et transmettre comme argument cu la méthode de tri.