2016-11-04 19 views
1

Partially sorting collections in ScalaはScalaのPartialOrderingでソートする方法を尋ねます。コメントには、与えられた例で部分的にソートするべきではないことが記述されています。私はを実行する部分的な順序で並べ替える必要があります - 私は他の国の孤独になるかもしれない国があり、これは部分的な発注を誘発します。Scalaの部分的な順序で並べ替え

したがって、List[T]TPartialOrdering[T]になる)を指定すると、部分的な並べ替えに応じて分かりやすい方法がありますか?

+0

最終的なリストはどのようにするべきですか? – pamu

+0

最初と最後のリストがどのようになるべきかの例をいくつか挙げることができますか? – pamu

+1

これはヘルプ:http://stackoverflow.com/questions/4620100/partial-order-sorting – wks

答えて

0

私は適切な並べ替えを自分で書いています。このような場合、私はいつも標準のライブラリ関数を見逃してしまったと思います。

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 
    } 

コメント/改善は歓迎されます。私はそれほど多くのScalaを書いていません。

関連する問題