Operaciones con colecciones IX: Operaciones de escritura

Operaciones con colecciones IX: Operaciones de escritura

Aunque más adelante veremos otras características y funcionalidades de las colecciones, y concretamente operaciones específicas para listas, conjuntos y diccionarios, con esta entrada terminamos la serie dedicada a las operaciones con colecciones.

Las colecciones mutables admiten ciertas operaciones que permiten cambiar su contenido, por ejemplo agregando o eliminando elementos.

Agregar elementos

Así, para agregar un solo elemento a una lista o a un conjunto usamos la función add(), que agrega el nuevo elemento al final de la colección:
val numeros = mutableListOf(1, 2, 3, 4)
numeros.add(5)
println(numeros) // [1, 2, 3, 4, 5]

También tenemos la función addAll() que utiliza como argumento un iterable, una secuencia o una array para agregar cada elemento de dicho objeto, sin necesidad de que los tipos del argumento y de la colección receptora sean similares, esto es, se pueden agregar todos los elementos de un conjunto (Set) a una lista (List).

Cuando addAll() se invoca sobre listas, los nuevos elementos se agregan en el mismo orden en que aparecen en el argumento. También se puede llamar a addAll() especificando una posición determinada como primer argumento, y entonces el primer elemento del argumento se inserta en esa posición seguido por el resto de elementos del argumento, desplazando a los elementos de la colección receptora hasta el final.
val numeros = mutableListOf(1, 2, 5, 6)
numeros.addAll(arrayOf(7, 8))
println(numeros) // [1, 2, 5, 6, 7, 8]
numeros.addAll(2, setOf(3, 4)) // el primer argumento es el índice de inserción
println(numeros) // [1, 2, 3, 4, 5, 6, 7, 8]

Otra manera de agregar elementos es utilizando el operador +=, tanto con un elemento individual como con otra colección, insertando los nuevos elementos al final de la colección:
val numeros = mutableListOf("uno", "dos")
numeros += "tres"
println(numeros) // [uno, dos, tres]
numeros += listOf("cuatro", "cinco")
println(numeros) // [uno, dos, tres, cuatro, cinco]

Eliminar elementos

Para eliminar un elemento de una colección mutable usamos la función remove(), que toma un valor y, en caso de existir en la colección, elimina la primera ocurrencia de ese valor (en caso contrario no hace nada).
val numeros = mutableListOf(1, 2, 3, 4, 3)
numeros.remove(3) // elimina el primer 3
println(numeros) // [1, 2, 4, 3]
numeros.remove(5) // no elimina nada
println(numeros) // [1, 2, 4, 3]

Para eliminar múltiples elementos a la vez, existen las siguientes funciones:
  • removeAll(), que elimina todos los elementos que están presentes en la colección de argumentos. Alternativamente, se puede llamar con un predicado como argumento y en este caso la función elimina todos los elementos para los cuales el predicado resulta verdadero (true).
  • retainAll() que, al contrario que la anterior, elimina todos los elementos excepto los de la colección de argumentos. Cuando se usa con un predicado, deja solo los elementos que coinciden.
  • clear(), que elimina todos los elementos de una lista y la deja vacía.
val numeros = mutableListOf(1, 2, 3, 4)
println(numeros) // [1, 2, 3, 4]
numeros.retainAll { it >= 3 }
println(numeros) // [3, 4]
numeros.clear()
println(numeros) // []

val numerosSet = mutableSetOf("uno", "dos", "tres", "cuatro")
numerosSet.removeAll(setOf("uno", "dos"))
println(numerosSet) // [tres, cuatro]

Y al igual que para agregar elementos de una colección usamos el operador +=, podemos eliminar elementos con el operador -=, tanto con un elemento individual (elimina la primera aparición del mismo) como con otra colección (se eliminan todas las apariciones de sus elementos):
val numeros = mutableListOf("uno", "dos", "tres", "tres", "cuatro", "cuatro")
numeros -= "tres"
println(numeros) // [uno, dos, tres, cuatro, cuatro]
numeros -= listOf("cuatro", "cinco")
println(numeros) // [uno, dos, tres]

Por otra parte, otras operaciones de escritura sobre colecciones consisten en actualizar los valores de sus elementos, como veremos en próximas entradas cuando hablemos sobre operaciones específicas de cada tipo de colección.

Comentarios

Entradas populares

I/O: entrada y salida de datos en consola

Recursos gratis para aprender Kotlin

Lectura y escritura de archivos