Cra*_*lin 21 scala scala-collections
有没有理由为什么Scala中没有隐式的列表排序?
val lists = List(List(2, 3, 1), List(2, 1, 3))
lists.sorted
error: could not find implicit value for parameter ord: Ordering[List[Int]]
Run Code Online (Sandbox Code Playgroud)
编辑
是的,我的问题是为什么没有内置订购已隐含在范围内.对我来说,似乎显而易见的是,第二个列表应该"小于"第一个列表,因为0处的项目相等而第二个列表的较低项目为1.我想知道是否可能是因为没有好的答案列表有两种不同的尺寸.
Mar*_*sky 44
我认为这是一种疏忽.词典排序对Seqs有意义.我们应该将它添加到标准库中.
顺便说一下,在我修复此问题之前,您可以通过其他方式执
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))
Run Code Online (Sandbox Code Playgroud)
但现在它的效果就像你希望的那样.
编辑:由于粗略的分歧问题与必要的隐含我把它移出默认范围.有一个隐式转换,它跨越一个绑定,如下所示:
implicit def SeqDerived[CC[X] <: collection.Seq[X], T](implicit ord: Ordering[T]): Ordering[CC[T]]
Run Code Online (Sandbox Code Playgroud)
......是问题的潜在秘诀.它将在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))
Run Code Online (Sandbox Code Playgroud)