list - Agregar un elemento a una Seq inmutable
list scala (1)
Use el operador :+
(adjuntar) para crear un nuevo Seq
usando:
val seq = Seq("a", "b") :+ "c"
// seq is now ("a","b","c")
Nota:: :+
creará un nuevo objeto Seq
. Si usted tiene
val mySeq = Seq("a","b")
y llamarás
mySeq :+ "c"
mySeq
seguirá siendo ("a","b")
Tenga en cuenta que algunas implementaciones de Seq
son más adecuadas para agregar que otras. List
está optimizada para anteponer. Vector
tiene operaciones rápidas de agregar y anteponer.
:::
es un método en la List
que requiere otra List
como su parámetro. ¿Cuáles son las ventajas que se ven al aceptar otros tipos de secuencia? Tendría que convertir otros tipos a una List
. Si sabes que List
es eficiente para tu caso de uso, utiliza :::
(si es necesario). Si quieres un comportamiento polimórfico, utiliza el ++
genérico.
No hay una sobrecarga de instanciación para usar Nil
; no lo instancias porque es un singleton.
Digamos que tengo una secuencia de cadenas como entrada y quiero obtener una nueva Seq
inmutable que consta de elementos de la entrada y un elemento "c"
. Aquí hay dos métodos que he descubierto que están funcionando:
-
assert(Seq("a", "b", "c") == Seq("a", "b") ++ Seq("c"))
- el problema con este es que parece que la instancia de un secuencia temporal (Seq("c")
) solo por el bien de la operación es redundante y dará como resultado una sobrecarga -
assert(Seq("a", "b", "c") == List("a", "b") ::: "c" :: Nil)
- esta restringe el tipo de colección de entrada para serList
, por lo queSeq("a", "b") ::: "c" :: Nil
no funcionará. También parece que la instanciación de unNil
también puede resultar en gastos generales
Mis preguntas son:
- ¿Hay alguna otra forma de realizar esta operación?
- ¿Cuál es mejor?
- No es
Seq("a", "b") ::: Nil
No está permitido un defecto de los desarrolladores de Scala?