Преобразование списка 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)