2016-11-04 2 views
1

Partially sorting collections in Scala demande comment trier par un PartialOrdering dans Scala. Les commentaires indiquent que l'auteur ne devrait pas être partiellement trié dans l'exemple donné. I do besoin de trier par un ordre partiel - j'ai des pays qui peuvent être des enclaves d'autres pays, ce qui induit une commande partielle. Donc: étant donné un List[T], où T s'étend PartialOrdering[T], existe-t-il un moyen raisonnable de trier selon l'ordre partiel?Tri par ordre partiel dans Scala

+0

Comment devrait être la liste finale? – pamu

+0

Pouvez-vous donner un exemple de la façon dont la liste initiale et finale devrait être? – pamu

+1

Est-ce que cela aide: http://stackoverflow.com/questions/4620100/partial-order-sorting – wks

Répondre

0

J'ai écrit un tri approprié moi-même. Des cas comme celui-ci me font toujours penser que j'ai manqué une fonction de bibliothèque standard.

def sortByPartialOrdering[T](ts: Array[T], lessThan: (T, T) => Boolean): ListBuffer[T] = { 
    val len = ts.size 
    val visited = Array.fill[Boolean](len)(false) 
    val postOrder = ListBuffer.empty[Int] 

    def visit(n: Int): Unit = { 
     visited(n) = true 
     for (i <- 0 until len) 
     if (!visited(i) && lessThan(ts(i), ts(n))) 
      visit(i) 
     postOrder += n 
    } 

    for (i <- 0 until len) 
     if (!visited(i)) 
     visit(i) 

    assert(postOrder.size == len) 

    postOrder map ts 
    } 

Commentaires/améliorations seraient les bienvenus - Je n'écris pas beaucoup Scala.