Ordenamiento personalizado con funciones
Parte de la sección Lógica y flujo de control del Journey de Lua de Coddy — lección 8 de 54.
Si bien table.sort() funciona muy bien para listas simples de números o cadenas, los datos del mundo real suelen ser más complejos. Es posible que tengas una tabla de registros de jugadores, artículos de inventario o puntuaciones de juegos donde cada entrada es en sí misma una tabla con múltiples campos.
Para ordenar estas estructuras complejas, necesitas decirle a table.sort() exactamente cómo comparar dos entradas. Aquí es donde las funciones de comparación personalizadas se vuelven esenciales. Una función de comparación toma dos elementos y devuelve true si el primero debe ir antes que el segundo en el orden de clasificación.
Aquí tienes un ejemplo con una tabla de registros de jugadores:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Después de ordenar, la tabla players estará ordenada por score en orden descendente, con Bob primero (200), Charlie segundo (175) y Alice tercera (150). La función de comparación accede al campo score de cada tabla de jugador para determinar su orden.
Puedes ordenar por cualquier campo que desees: nombres alfabéticamente, niveles numéricamente o incluso combinar múltiples criterios.
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo de control
1Iteración avanzada de tablas
Iterar con pairs()Iterar con ipairs()pairs() vs. ipairs()Resumen - Ficha de personaje2Más funciones de la librería table
table.concat()Construcción de tablas y unpack()table.sort()Ordenamiento personalizado con funcionesRepaso - Tabla de puntuaciones altas