table.sort com comparadores
Ordene tabelas com funções comparadoras personalizadas e estratégias de ordenação estável.
table.sort com comparadores é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
O que é table.sort?
table.sort ordena uma tabela no próprio local usando uma função de comparação. Sem um comparador, usa o operador <.
Ordenação Crescente Padrão
Chame table.sort(t) em uma tabela de números ou strings para ordená-la em ordem crescente.
local nums = {5, 2, 8, 1, 9}
table.sort(nums)
for _, v in ipairs(nums) do print(v) endComparador Personalizado
Passe uma função function(a, b) return a < b end como segundo argumento.
local words = {"banana", "apple", "cherry"}
table.sort(words, function(a, b) return a < b end)
print(table.concat(words, ", "))Ordenação Decrescente
Inverta a comparação para ordenar em ordem decrescente.
local nums = {3, 1, 4, 1, 5, 9}
table.sort(nums, function(a, b) return a > b end)
print(table.concat(nums, ", "))Ordenando Tabelas por um Campo
Ordene uma matriz de registros por uma chave de campo específica.
local people = {
{name="Charlie", age=30},
{name="Alice", age=25},
{name="Bob", age=28}
}
table.sort(people, function(a, b) return a.age < b.age end)
for _, p in ipairs(people) do print(p.name, p.age) endOrdenação por Várias Chaves
Ordene por uma chave principal e, em seguida, por uma chave secundária para desempatar.
table.sort(people, function(a, b)
if a.age ~= b.age then return a.age < b.age end
return a.name < b.name
end)Observação sobre Estabilidade
A função table.sort do Lua não tem estabilidade garantida. Elementos iguais podem aparecer em qualquer ordem. Use um índice como critério de desempate para obter resultados determinísticos.
Ordenando Strings sem Diferenciar Maiúsculas de Minúsculas
Normalize com string.lower dentro do comparador.
table.sort(words, function(a, b)
return a:lower() < b:lower()
end)Ordenação com um Extrator de Chaves
Armazene em cache as chaves extraídas para evitar cálculos repetidos durante a ordenação, usando uma abordagem de transformação de Schwartzian.
local function sortBy(t, keyFn)
local keyed = {}
for i, v in ipairs(t) do keyed[i] = {val=v, key=keyFn(v)} end
table.sort(keyed, function(a, b) return a.key < b.key end)
for i, item in ipairs(keyed) do t[i] = item.val end
endOrdenando Tabelas Grandes
Para tabelas muito grandes, considere uma transformação de Schwartzian: associe cada elemento à sua chave de ordenação, ordene e depois extraia os elementos. Isso evita recalcular a chave a cada comparação.
No Próprio Local vs. Cópia
table.sort altera a tabela original. Para ordenar uma cópia, use primeiro table.move ou percorra a tabela para cloná-la; depois, ordene o clone.
Pergunta sobre Comparadores
Qual comparador ordena números em ordem crescente?
Recapitulação: table.sort
table.sort ordena no próprio local, aceita um comparador opcional, não é estável e é comumente usado com estratégias baseadas em campos ou em várias chaves para atender a requisitos complexos de ordenação.
Perguntas Frequentes
A aula “table.sort com comparadores” é grátis?
Sim — o texto completo de “table.sort com comparadores” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “table.sort com comparadores”?
Ordene tabelas com funções comparadoras personalizadas e estratégias de ordenação estável. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “table.sort com comparadores”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- table.sort com comparadores
- table.concat e table.move
- Cópia profunda e cópia superficial
- Transformando tabelas: map, filter, reduce