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.
Aunque 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 del inventario o puntuaciones de juegos, donde cada entrada es a su vez una tabla con varios campos.
Para ordenar estas estructuras complejas, debes indicar 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 aparecer antes que el segundo en el orden ordenado.
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 de jugadores estará ordenada por puntuación en orden descendente, con Bob en primer lugar (200), Charlie en segundo (175) y Alice en tercer lugar (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 quieras: nombres alfabéticamente, niveles numéricamente o incluso combinar varios 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 altasPractica por tu cuenta: Compilador de Lua online