Kotlin es un potente lenguaje que proporciona una serie de funciones integradas para ordenar colecciones de manera eficiente, lo cual es crucial en el desarrollo de aplicaciones. Aquí exploraremos cómo ordenar listas utilizando distintas funciones ofrecidas por Kotlin.
¿Cómo se utiliza la función sorted?
Para ordenar una lista de números de manera ascendente, Kotlin ofrece la función sorted. A continuación, se muestra un ejemplo práctico:
Esta función invierte el orden natural de la lista.
¿Qué pasa si necesito un orden personalizado?
Kotlin permite ordenar listas basadas en una condición mediante la función sortedBy. Por ejemplo, para ordenar los números poniendo al final los menores a 50:
val ordenPorMultiplos = numerosLoteria.sortedBy{if(it <50) Int.MAX_VALUE else it }println(ordenPorMultiplos)// Salida personalizada
Esto es útil para escenarios donde se requiere un criterio de ordenamiento específico, como agrupar números menores de un determinado valor.
¿Cómo crear desorden usando shuffle?
Para mezclar una lista y generar un orden aleatorio, Kotlin incluye la función shuffle:
val numerosAleatorios = numerosLoteria.shuffled()println(numerosAleatorios)// Salida aleatoria
La función shuffle es ideal para casos donde se necesita un orden no predecible, similar al de una lotería.
¿Cómo invertir el orden de una lista?
La función reversed devuelve una nueva lista con el orden completamente inverso al original:
Este método es excelente cuando se necesita mostrar elementos del más reciente al más antiguo, por ejemplo.
¿Cómo convertir elementos de una lista con map?
La programación funcional en Kotlin permite transformar los elementos de una lista con map. Si deseas transformar números a mensajes de texto, puedes hacer lo siguiente:
val mensajesNumeros = numerosLoteria.map{"Tu número de lotería es $it"}println(mensajesNumeros)
Esta conversión puede convertir los tipos de los elementos a otro tipo, como enteros a cadenas.
¿Cómo filtrar listas con filter?
La función filter se utiliza para seleccionar elementos de una lista que cumplan con una condición específica. Por ejemplo, para filtrar números mayores que 50:
val numerosFiltrados = numerosLoteria.filter{ it >50}println(numerosFiltrados)// Salida: [56, 78, 66]
Filtrar listas es útil para obtener subconjuntos que cumplen con determinados criterios, como hallar solo números pares o impares.
Estas funciones ricas en funcionalidades embellecen a Kotlin al simplificar el manejo de colecciones, evitando implementar algoritmos complejos y permitiéndote escribir código más legible y eficiente. ¡Continúa explorando el mundo de Kotlin y todas sus capacidades!
Ordenar y Manipular Listas en Kotlin: Funciones Clave y Ejemplos
Otra útil convención es que si una función literal sólo tiene un parámetro, su declaración puede ser omitida (junto con el ->) y su nombre será it.
tanto para mutable como para inmutable: lo que éstas funciones están haciendo en realidad es, devolver una nueva lista con las propiedades de la función que se aplica.
sorted() = ordena de menor a mayor
sortedDescending() = ordena de mayor a menor
sortedBy{condicion} = ordena segun la condicion que se pasa de parametro
suffled() = desordena la lista
reversed() = invierte el orden de la lista original
map{ algoritmo } = ejecuta un algoritmo para cada elemento
filter { condicion } = devuelve una nueva lista con los elementos que cumplen la condicion
<fun main(args:Array<String>){ val numerosDeLoteria =listOf(11,22,43,56,78,66) val numerosSorted = numerosDeLoteria.sorted()println(numerosSorted) val numerosDeLoteriaDescendientes = numerosDeLoteria.sortedDescending()println(numerosDeLoteriaDescendientes) val ordenarPorMultiplos = numerosDeLoteria.sortedBy{ numero -> numero <50}println(ordenarPorMultiplos) val numerosAleatorios = numerosDeLoteria.shuffled()println(numerosAleatorios) val numerosDeReversa = numerosDeLoteria.reversed()println(numerosDeReversa) val mensajesDeNumeros = numerosDeLoteria.map{ numero ->"Tu numero de loteria es $numero"}println(mensajesDeNumeros) val numerosFiltrados = numerosDeLoteria.filter{numero -> numero >50}println(numerosFiltrados)}>
en vez de meterlo en variable directamente lo puedes imprimir usando el println y su desarrollo```js
println("los numeros de loteria mayor a 50 son ${numerosDeLoteria.filter { numero -> numero > 100 }}")
No estaría demás indicar que sortedBy{numero -> numero<50 }
En realidad el orden lo realiza porque devuelve true o false en cada iteración, entonces ordena a través de lo que vale true(1) y false(0)
fun main(args:Array<String>){ val lotteryNumbers =listOf(11,22,43,56,78,66) val sortedNumbers = lotteryNumbers.sorted()println(sortedNumbers) val descendantLotteryNumbers = lotteryNumbers.sortedDescending()println(descendantLotteryNumbers) val sortByMultiples = lotteryNumbers.sortedBy{ number -> number <50}println(sortByMultiples) val randomNumbers = lotteryNumbers.shuffled()println(randomNumbers) val reverseNumbers = lotteryNumbers.reversed()println(reverseNumbers) val numbersMessage = lotteryNumbers.map{ number ->"Your lottery number is, $number!"}println(numbersMessage) val filteredNumbers = lotteryNumbers.filter{ number -> number >50}println(filteredNumbers)}
Para los que venimos de Javascript es sencillo de comprender estos tópicos, sería interesante profundizar más para aquellos que lo ven por primera vez debido a la complejidad del tema
Pero la lista numerosDeLoteria es inmutable, lo que éstas funciones están haciendo en realidad es, devolver una nueva lista con las propiedades de la función que se aplica.
En Kotlin, puedes usar la función List() junto con la función random() para crear una lista de longitud específica que contenga números aleatorios.
.
La función random() se puede invocar en un objeto IntRange que representa un rango de números enteros, y devuelve un número aleatorio dentro de ese rango.
.
Para crear una lista de longitud determinada con números aleatorios, puedes hacer lo siguiente:
val randomList =List(10){(1..100).random()}
En este ejemplo, se crea una lista de longitud 10 con números aleatorios entre 1 y 100. La función List() se usa para crear una lista vacía de longitud 10, y el segundo argumento de la función { (1..100).random() } se utiliza para llenar la lista con números aleatorios.
.
Si quieres crear una lista de longitud variable, puedes reemplazar el número 10 en el ejemplo anterior con una variable que contenga el tamaño deseado de la lista.
Hola comunidad!, tengo una duda, en la parte cuando se usa la función reverse, noto que el programa se ejecuta erroneo en los dos primeros indices, pues deberia ser [78,66,56,43,22,11] (minuto11:35), alguno sabe por qué?, muchas gracias
Hola!! También estaba analizando eso pero es porque se usó la función reverse() con la lista original "numerosDeLoteria" que contiene [11,22,43,56,78,66] y no con la que se imprime en consola en la primera línea [11,22,43,56,66,78], entonces en ese sentido si estaría bien ordenado [66,78,56,43,22,11]
No creo ser el único que se dio cuenta de esto…. pero fíjense que en el ejemplo del reversed() debe dar como resultado la lista inversa a la de numerosDeLoteria, pero el orden está mal…. la lista de números básica es [11, 22, 43, 56, 66, 78] y la inversa debería de ser [78, 66, 56, 43, 22, 11] pero en vez de eso, en la consola le está dando erróneamente el resultado de los primeros dos elementos ==> [66, 78, 56, 43, 22, 11], díganme si hay algún error conceptual o algo por el estilo que no estoy logrando captar por favor... (esto sucede en el minuto 7:00)
fun main(args:Array<String>){// sort lists val lottery =listOf(11,2,44,33,56,78,66) val sorted = lottery.sorted() val sortedDescending = lottery.sortedDescending() val sortedMultiples = lottery.sortedBy{ num -> num <50} val randomNumbers = lottery.shuffled() val reverseLottery = lottery.reversed() val lotteryMapped = lottery.map{ num -> num %2==0} val lotteryFiltered = lottery.filter{ num -> num %2==0} val lotteryListNumbers = lottery.filter{ num -> num %2==0}.map{ num ->"number = $num"}println("original numbers $lottery \n"+"sorted ascending $sorted \n"+"sorted descending $sortedDescending \n"+"sorted multiples $sortedMultiples \n"+"random numbers $randomNumbers \n"+"reversed numbers $reverseLottery \n"+"Mapped numbers $lotteryMapped \n"+"Filtered numbers $lotteryFiltered \n"+"Filtered and mapped numbers $lotteryListNumbers \n")}
println("Ordenar listas")//Ordenar listas val numerosDeLoteria =listOf(11,22,43,56,78,66)//Ordenar ascendentemente con sorted val numerosAscendentes = numerosDeLoteria.sorted()println(numerosAscendentes)//Ordenar descendentemente con sortedDescending val numerosDescendentes = numerosDeLoteria.sortedDescending()println(numerosDescendentes)//Ordenar dependiendo de una condición con sortedBy val ordenarPorMultiplos = numerosDeLoteria.sortedBy{ numero -> numero <50}println(ordenarPorMultiplos)//Ordenar de forma aleatoria val numerosAleatorios = numerosDeLoteria.shuffled()println(numerosAleatorios)//Ordenar de forma inversa val numerosEnReversa = numerosDeLoteria.reversed()println(numerosEnReversa)//Funciones de programación funcional//Map - Convertir un elemento de un tipo a otro tipo val mensajesDeNumeros = numerosDeLoteria.map{ numero ->println(numero);"Tu número de lotería es $numero"}println(mensajesDeNumeros)//Filtrar elementos dependiendo de condiciones con filter val numerosFiltrados = numerosDeLoteria.filter{ numero -> numero >50}println(numerosFiltrados)