Menu
Coddy logo textTech

table.sort()

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

Ao trabalhar com tabelas do tipo lista, você frequentemente precisará organizar os dados em uma ordem específica. Lua fornece a função table.sort() para organizar os elementos da tabela in-place, o que significa que ela modifica a tabela original em vez de criar uma nova.

A sintaxe básica é direta:

table.sort(myTable)

Por padrão, table.sort() organiza números em ordem crescente e strings em ordem alfabética. Aqui está um exemplo com uma lista de pontuações:

local scores = {85, 42, 91, 67, 55}
table.sort(scores)
-- scores agora é {42, 55, 67, 85, 91}

Para strings, a ordenação segue a ordem alfabética:

local names = {"Charlie", "Alice", "Bob"}
table.sort(names)
-- names agora é {"Alice", "Bob", "Charlie"}

Às vezes, a ordenação padrão não é o que você precisa. Você pode fornecer uma função de comparação personalizada como um segundo argumento para controlar como os elementos são comparados. Esta função recebe dois elementos e retorna true se o primeiro deve vir antes do segundo:

local numbers = {5, 2, 8, 1}
table.sort(numbers, function(a, b)
    return a > b  -- Ordenar em ordem decrescente
end)
-- numbers agora é {8, 5, 2, 1}

A função table.sort() funciona apenas com tabelas do tipo lista que possuem chaves inteiras sequenciais começando de 1. É uma ferramenta poderosa para organizar dados antes de exibi-los ou processá-los em uma ordem específica.

challenge icon

Desafio

Fácil

Escreva uma função sortScoresDescending que recebe uma tabela scores e retorna uma string formatada dos scores ordenados em ordem decrescente.

Use table.sort() com uma função de comparação personalizada para organizar os scores do maior para o menor, então use table.concat() para juntá-los em uma única string separada por vírgulas.

Parâmetros:

  • scores (table): Uma tabela estilo lista contendo scores numéricos

Retorno: Uma string com os scores ordenados do maior para o menor, separados por vírgulas. Formato: 95,87,76,54

Folha de consulta

A função table.sort() organiza os elementos da tabela no local, modificando a tabela original:

table.sort(myTable)

Por padrão, ela ordena números em ordem crescente e strings em ordem alfabética:

local scores = {85, 42, 91, 67, 55}
table.sort(scores)
-- scores agora é {42, 55, 67, 85, 91}

local names = {"Charlie", "Alice", "Bob"}
table.sort(names)
-- names agora é {"Alice", "Bob", "Charlie"}

Você pode fornecer uma função de comparação personalizada como um segundo argumento. A função recebe dois elementos e retorna true se o primeiro deve vir antes do segundo:

local numbers = {5, 2, 8, 1}
table.sort(numbers, function(a, b)
    return a > b  -- Ordenar em ordem decrescente
end)
-- numbers agora é {8, 5, 2, 1}

table.sort() funciona apenas com tabelas do tipo lista que possuem chaves inteiras sequenciais começando em 1.

Experimente você mesmo

function sortScoresDescending(scores)
    -- Escreva o código aqui
end
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