Operaciones con colecciones III: Operadores plus y minus

Operaciones con colecciones III: Operadores plus y minus

Continuando la serie dedicada a las funciones para realizar operaciones sobre colecciones, en esta entrada vamos a ver cómo utilizar los operadores plus (+) y minus (-) para trabajar con colecciones y concretamente para realizar operaciones de adición y sustracción con ellas.

Estos operadores toman una colección como primer operando y otra colección o un elemento de una colección como segundo operando, y en base a ellos devuelven una nueva colección de solo lectura.

El operador plus devuelve como resultado una nueva colección que contiene tanto los elementos de la colección original como del segundo operando, mientras que el resultado del operador minus contiene los elementos de la colección original excepto los elementos del segundo operando (si este segundo operando es un elemento, se elimina su primera aparición en el resultado, y si se trata de una colección se eliminan todas las apariciones de sus elementos en la nueva colección resultante).
// List<Int>
val intLista = listOf(1, 21, 21, 2, 6, 3, 2)
println(intLista.plus(10))  // [1, 21, 21, 2, 6, 3, 2, 10]
println(intLista.minus(21)) // [1, 21, 2, 6, 3, 2]
println(intLista.minus(listOf(21))) // [1, 2, 6, 3, 2]
println(intLista.minus(-1)) // [1, 21, 21, 2, 6, 3, 2]
Podemos escribirlos directamente con los signos + y -:
// List<String>
val numeros = listOf("uno", "dos", "tres", "cuatro")

val plusLista = numeros + "cinco"
val minusLista = numeros - listOf("tres", "cuatro")
println(plusLista)  // [uno, dos, tres, cuatro, cinco]
println(minusLista) // [uno, dos]
Volveremos a ver los operadores plus y minus cuando hablemos de las operaciones específicas de los diccionarios (Map). Por otra parte, también existen los operadores de asignación aumentada plusAssign (+=) y minusAssign (-=) para operar con la colecciones como veremos en las operaciones de escritura.

Otro ejemplo de plus y minus con colecciones:
// Set<String>
val diasSemana = setOf("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo")
val finesSemana = setOf("Sábado", "Domingo")

val diasHabiles = diasSemana.minus(finesSemana) // diasSemana - finesSemana
println(diasHabiles) // [Lunes, Martes, Miércoles, Jueves, Viernes]

val diasLaborales = diasSemana.minus("Domingo") // diasSemana - "Domingo"
println(diasLaborales) // [Lunes, Martes, Miércoles, Jueves, Viernes, Sábado]

val diasNoLaborales = (diasSemana - diasLaborales).plus(listOf("Navidad", "Vacaciones"))
// diasSemana - diasLaborales + listOf("Navidad", "Vacaciones")
println(diasNoLaborales) // [Domingo, Navidad, Vacaciones]

Comentarios

Entradas populares

I/O: entrada y salida de datos en consola

Recursos gratis para aprender Kotlin

Lectura y escritura de archivos