如果我有一个Ints列表,如:
val myList = List(3,2,1,9)
从Int的List或Seq创建SortedSet的正确/首选方法是什么,其中项目从最小到最大排序?
如果你拿着枪,我会说:
val itsSorted = collection.SortedSet(myList)
但是我得到一个错误,即没有为List [Int]定义隐式排序。
答案 0 :(得分:39)
使用:
collection.SortedSet(myList: _*)
您使用它的方式,编译器认为您要创建SortedSet[List[Int]]
而不是SortedSet[Int]
。这就是为什么它抱怨List[Int]
没有隐式排序。
注意方法签名中A*
类型的重复参数:
def apply [A] (elems: A*)(implicit ord: Ordering[A]): SortedSet[A]
要将myList
视为A
使用的序列参数,请使用_*
类型注释。
答案 1 :(得分:11)
您还可以利用CanBuildFrom
实例,并执行此操作:
val myList = List(3,2,1,9)
myList.to[SortedSet]
// scala.collection.immutable.SortedSet[Int] = TreeSet(1, 2, 3, 9)
答案 2 :(得分:8)
似乎没有直接接受List
的构造函数(如果我错了,请纠正我)。但你可以轻松写出
val myList = List(3,2,1,9)
val itsSorted = collection.SortedSet.empty[Int] ++ myList
达到同样的效果。 (见http://www.scala-lang.org/docu/files/collections-api/collections_20.html。)
答案 3 :(得分:3)
如果你必须要映射,这个特别有用:
import scala.collection.breakOut
val s: collection.SortedSet[Int] = List(1,2,3,4).map(identity)(breakOut)
//--> s: scala.collection.SortedSet[Int] = TreeSet(1, 2, 3, 4)