顺便说一句我之前也解决了这个问题,你可以做到这一点其他的方法:
scala> List[Iterable[Int]](List(2, 3, 1), List(2, 1, 3)).sorted
res0: List[Iterable[Int]] = List(List(2, 1, 3), List(2, 3, 1))
scala> List(List(2, 3, 1), List(2, 1, 3)).sorted(Ordering[Iterable[Int]])
res1: List[List[Int]] = List(List(2, 1, 3), List(2, 3, 1))
但现在它就像你的希望。
编辑:由于粗略的分歧问题与必要的隐式我把它移出默认范围。有一个隐含的转换,如下所示跨越一个绑定:
implicit def SeqDerived[CC[X] <: collection.Seq[X], T](implicit ord: Ordering[T]): Ordering[CC[T]]
...是潜在的问题处方。它将在2.9版本中提供,但您必须按如下方式导入它。
scala> val lists = List(List(2, 3, 1), List(2, 1, 3))
lists: List[List[Int]] = List(List(2, 3, 1), List(2, 1, 3))
scala> lists.sorted
<console>:9: error: could not find implicit value for parameter ord: Ordering[List[Int]]
lists.sorted
^
scala> import Ordering.Implicits._
import Ordering.Implicits._
scala> lists.sorted
res1: List[List[Int]] = List(List(2, 1, 3), List(2, 3, 1))
字典序(你描述)可定义为不同大小的名单,但你需要做出选择,以更短的名单是否长于列出大于或较小。这两种方法都可以用来创建数学有效的订单,而较短的<更长的选项可能适合更多的用例,而更短的>更长的选项也可以使用。这可能是为什么在标准库的List中没有提供隐式排序的原因,但我仍然认为缺少一般的有用性是更可能的原因。 – 2010-12-20 20:24:06