list scala seq

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:

  1. 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
  2. assert(Seq("a", "b", "c") == List("a", "b") ::: "c" :: Nil) - esta restringe el tipo de colección de entrada para ser List , por lo que Seq("a", "b") ::: "c" :: Nil no funcionará. También parece que la instanciación de un Nil también puede resultar en gastos generales

Mis preguntas son:

  1. ¿Hay alguna otra forma de realizar esta operación?
  2. ¿Cuál es mejor?
  3. No es Seq("a", "b") ::: Nil No está permitido un defecto de los desarrolladores de Scala?