将Int列表转换为Scala中的SortedSet

And*_*ndy 22 scala sortedset

如果我有一个Ints列表,如:

val myList = List(3,2,1,9)

从List或Seq of Ints创建SortedSet的正确/首选方法是什么,其中项目从最小到最大排序?

如果你把枪拿到我头上,我会说:

val itsSorted = collection.SortedSet(myList)

但是我得到一个错误,即没有为Lis​​t [Int]定义隐式排序.

huy*_*hjl 39

使用:

collection.SortedSet(myList: _*)
Run Code Online (Sandbox Code Playgroud)

你使用它的方式,编译器认为你想创建一个SortedSet[List[Int]]不是SortedSet[Int].这就是为什么它抱怨没有隐含的订购List[Int].

注意A*方法签名中重复的类型参数:

def apply [A] (elems: A*)(implicit ord: Ordering[A]): SortedSet[A]
Run Code Online (Sandbox Code Playgroud)

为了治疗myList作为序列参数A使用,该_*类型的注释.


Ben*_*nor 12

您还可以利用该CanBuildFrom实例,并执行以下操作:

val myList = List(3,2,1,9)
myList.to[SortedSet]
// scala.collection.immutable.SortedSet[Int] = TreeSet(1, 2, 3, 9)
Run Code Online (Sandbox Code Playgroud)


Mec*_*ail 8

似乎没有直接接受的构造函数List(如果我错了,请纠正我).但你可以轻松写

val myList = List(3,2,1,9)
val itsSorted = collection.SortedSet.empty[Int] ++ myList
Run Code Online (Sandbox Code Playgroud)

达到同样的效果.(见http://www.scala-lang.org/docu/files/collections-api/collections_20.html.)