La Función flatten En Kotlin

ANUNCIO
Loading...

En este tutorial aprenderás a cómo usar la función flatten en Kotlin para combinar los elementos de colecciones anidadas en una sola lista.

Sintaxis De flatten()

La función flatten() te permite aplanar colecciones anidadas, es decir, colecciones con elementos que son colecciones.

El resultado final será una lista con la combinación de todos los elementos de las colecciones del interior. Clarifiquemos esta idea con una ilustración:

Ejemplo de la función flatten en Kotlin

Tenemos una lista con dos elementos: las listas L0 = [1, 3, 5, 7] y L1 = [0, 1, 1, 2]. Luego de aplicar flatten(), el retorno es una nueva lista con la unión de todos los elementos.

Si materializas el ejemplo anterior en Kotlin, tendrías lo siguiente:

fun main() { val numbers = listOf( listOf(1, 3, 5, 7), listOf(0, 1, 1, 2) ) println(numbers.flatten()) // [1, 3, 5, 7, 0, 1, 1, 2] }
Lenguaje del código: Kotlin (kotlin)

La función de extensión flatten() solo está disponible para las colecciones anidadas, ya que su tipo recibidor lo hace explícito en la sintaxis de definición:

// Arreglos anidados fun <T> Array<out Array<out T>>.flatten(): List<T> // Iterables anidados fun <T> Iterable<Iterable<T>>.flatten(): List<T>
Lenguaje del código: Kotlin (kotlin)

Por esta razón no podrás usar flatten() en colecciones regulares, arreglos de iterables o en iterables de arreglos.

fun main() { val arrayOfLists = arrayOf(listOf(1, 2), listOf(2, 4)) val normalSet = setOf("xy", "yz", "xz") println(arrayOfLists.flatten()) // Unresolved reference println(normalSet.flatten()) // Unresolver reference }
Lenguaje del código: Kotlin (kotlin)

Ejemplo De flatten() En Arreglo Anidado

Supongamos que deseamos vectorizar una matriz de 3×3, esto es, convertirla en un vector. Luego de ello se requiere reducir el vector a una colección sin elementos repetidos, ordenarlos de mayor a menor e imprimirlos:

fun main() { val matrix = arrayOf( arrayOf(3, 1, 2), arrayOf(-4, 1, 3), arrayOf(1, 3, 5) ) println( matrix.flatten() // [3, 1, 2, -4, 1, 3, 1, 3, 5] .toSet() // [3, 1, 2, -4, 5] .sorted() // [-4, 1, 2, 3, 5] ) }
Lenguaje del código: Kotlin (kotlin)

Una forma de hacerlo es invocando a la función flatten() desde la matriz. Esto aplicará una trasformación lineal sobre ella, cuyo resultado será el vector [3, 1, 2, -4, 1, 3, 1, 3, 5].

Luego puedes eliminar los elementos duplicados usando toSet() o la función distinct(). Esto nos dejará con [3, 1, 2, -4, 5].

Finalmente ordenamos de mayor a menor con sorted() lo que resulta en [-4, 1, 2, 3, 5].

Ejemplo De flatten() En Lista Anidada

Consideremos la asistencia de varias familias a un evento. Cada integrante participará en la rifa de un gran premio y para ello necesitamos juntar todos los nombres en una bolsa, de donde se sacará al ganador al azar.

fun main() { val families = listOf( listOf("Miguel", "Paula"), listOf("Yadira", "Guillermo"), listOf("Paty", "Carlos"), listOf("Camilo", "Berenice") ) println(families.flatten().random()) // Nombre aleatorio }
Lenguaje del código: Kotlin (kotlin)

El anterior código simula el comportamiento enunciado. Las familias son representadas por una lista con listas de los integrantes. Ponerlos a todos en juego requiere llamar a flatten().

Finalmente el ganador es elegido aleatoriamente con la función random(), la cual retorna un elemento de la colección con un algoritmo de azar.

¿Ha sido útil esta publicación?