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.
Desafio
FácilEscreva 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
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
1Iteração Avançada de Tabelas
Iterando com pairs()Iterando com ipairs()pairs() vs. ipairs()Revisão - Ficha de Personagem2Mais Funções da Biblioteca Table
table.concat()Construção de tabelas e unpack()table.sort()Ordenação personalizada com funçõesRecapitulação - Placar de recordes