Partially sorting collections in Scala询问如何按Scala中的PartialOrdering进行排序。注释表明作者不应该在给出的示例中进行部分排序。我做需要按部分排序排序 - 我的国家可能是其他国家的飞地,这会导致部分排序。
所以:给定List[T]
,其中T
扩展PartialOrdering[T]
,是否有一种合理的方式根据偏序进行排序?
答案 0 :(得分: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。