Преобразование списка Ints в SortedSet в Scala

Если у меня есть список Ints, таких как:

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

каков правильный / предпочтительный способ создания SortedSet из списка или Seq Ints, где элементы сортируются от наименьшего до наибольшего?

val itsSorted = collection.SortedSet(myList)

но я получаю ошибку относительно того, что нет неявного порядка, определенного для List[Int].

4 ответов


использование:

collection.SortedSet(myList: _*)

как вы его использовали, компилятор думает, что вы хотите создать SortedSet[List[Int]] не SortedSet[Int]. Вот почему он жалуется на отсутствие неявного заказа для List[Int].

обратите внимание на повторяющийся параметр типа A* в подписи метода:

def apply [A] (elems: A*)(implicit ord: Ordering[A]): SortedSet[A]

для лечения myList в качестве аргумента последовательность A использовать _* тип аннотации.


вы также можете воспользоваться CanBuildFrom экземпляр и сделайте следующее:

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

Кажется, что нет конструктора, который непосредственно принимает 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.)


это особенно полезно, если вам все равно нужно сопоставить:

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)