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
1
A
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.
Comment devrait être la liste finale? – pamu
Pouvez-vous donner un exemple de la façon dont la liste initiale et finale devrait être? – pamu
Est-ce que cela aide: http://stackoverflow.com/questions/4620100/partial-order-sorting – wks