recorrer - scala ejemplos
Convertir la lista de entradas en un conjunto ordenado en Scala (4)
Si tengo una lista de caracteres como:
val myList = List(3,2,1,9)
¿Cuál es la forma correcta / preferida de crear un Conjunto de Ordenamiento a partir de una Lista o Secuencia de Ints, donde los elementos se ordenan de menor a mayor?
Si me hubieras puesto un arma en la cabeza, habría dicho:
val itsSorted = collection.SortedSet(myList)
pero recibo un error en cuanto a que no hay un orden implícito definido para la Lista [Int].
Esto es especialmente útil si tienes que mapear de todos modos:
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)
No parece haber un constructor que acepte directamente la List
(corríjame si me equivoco). Pero puedes escribir fácilmente
val myList = List(3,2,1,9)
val itsSorted = collection.SortedSet.empty[Int] ++ myList
para el mismo efecto. (Consulte http://www.scala-lang.org/docu/files/collections-api/collections_20.html .)
También puede aprovechar la instancia de CanBuildFrom
y hacer esto:
val myList = List(3,2,1,9)
myList.to[SortedSet]
// scala.collection.immutable.SortedSet[Int] = TreeSet(1, 2, 3, 9)
Utilizar:
collection.SortedSet(myList: _*)
De la forma en que lo SortedSet[List[Int]]
, el compilador piensa que quieres crear un SortedSet[List[Int]]
no un SortedSet[Int]
. Es por eso que se queja de que no haya un pedido implícito para la List[Int]
.
Observe el parámetro repetido de tipo A*
en la firma del método:
def apply [A] (elems: A*)(implicit ord: Ordering[A]): SortedSet[A]
Para tratar myList
como un argumento de secuencia de A
use, la anotación de tipo _*
.