Menu
Coddy logo textTech

Ordenação personalizada com funções

Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 8 de 54.

Embora o table.sort() funcione muito bem para listas simples de números ou strings, os dados do mundo real costumam ser mais complexos. Você pode ter uma tabela de registros de jogadores, itens de inventário ou pontuações de jogos onde cada entrada é, por si só, uma tabela com múltiplos campos.

Para ordenar essas estruturas complexas, você precisa dizer ao table.sort() exatamente como comparar duas entradas. É aqui que as funções de comparação personalizadas se tornam essenciais. Uma função de comparação recebe dois elementos e retorna true se o primeiro deve vir antes do segundo na ordem de classificação.

Aqui está um exemplo com uma tabela de registros de jogadores:

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)

Após a ordenação, a tabela players será ordenada por score em ordem decrescente, com Bob em primeiro (200), Charlie em segundo (175) e Alice em terceiro (150). A função de comparação acessa o campo score de cada tabela de jogador para determinar sua ordem.

Você pode ordenar por qualquer campo que desejar — nomes em ordem alfabética, níveis numericamente ou até mesmo combinar múltiplos critérios.

Folha de consulta

Para ordenar tabelas com estruturas de dados complexas, use uma função de comparação personalizada com table.sort(). A função de comparação recebe dois elementos e retorna true se o primeiro deve vir antes do 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)

Isso ordena os jogadores por pontuação em ordem decrescente. Você pode ordenar por qualquer campo na estrutura da tabela.

Experimente você mesmo

Esta lição não inclui um desafio de código.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow