Menu
Coddy logo textTech

Ordenamiento personalizado con funciones

Parte de la sección Logic & Flow 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.

Hoja de referencia

Para ordenar tablas con estructuras de datos complejas, utiliza una función de comparación personalizada con table.sort(). La función de comparación toma dos elementos y devuelve true si el primero debe ir antes que el segundo.

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)

Esto ordena a los jugadores por puntuación en orden descendente. Puedes ordenar por cualquier campo en la estructura de la tabla.

Pruébalo tú mismo

Esta lección no incluye un desafío de código.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow