順便說一句我之前也解決了這個問題,你可以做到這一點其他的方法:
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