2011-02-13 2 views
1

Comment puis-je trier un vecteur de mes objets dans Scala? Y a-t-il des routines de tri de bibliothèque ou dois-je écrire le mien?Trier Vecteur d'objets dans Scala

J'ai une classe:

class Data2D(var x:Int, var y:Int) 

et je passe un vecteur de ces derniers à ma fonction:

private def foo(data: Vector[Data2D]): Int = { 
    data:Vector sortedOnX = // ?? 
} 

comment puis-je trier le vecteur, sur la base des valeurs x du Objets Data2D?

En java, je le veux

Collections.sort(data, XComparator.INSTANCE); 

où XComparator est:

enum XComparator implements Comparator<Data2D> { 
    INSTANCE; 
    @Override 
    public int compare(Data2D o1, Data2D o2) { 
     if (o1.getX() <= o2.getX()) { 
      return -1; 
     } else { 
      return 1; 
     } 
    } 
} 

Répondre

6
private def foo(data: Vector[Data2D]): Int = data.sortBy(_.x) 

Voir aussi les méthodes sortWith et sorted, ainsi que les méthodes fournies par l'objet Ordering.

+0

Merci beaucoup. Je n'aurais jamais deviné de fournir l'argument "_.x" - comme mon auto-complétion d'éclipse indique que "sortBy()" ne prend aucun paramètre. – drozzy

+0

@drozzy Bizarre. Scaladoc est votre ami: http://www.scala-lang.org/api/current/index.html –

+0

Ouais, je trouve aussi le scaladoc cryptique :) C'est juste beaucoup de parenthèses et de crochets, je suis comme o_o http://www.scala-lang.org/api/current/scala/collection/immutable/Vector.html – drozzy

Questions connexes