0Pricing
Lua Academy · Lezione

table.sort con comparatori

Ordini le tabelle con funzioni comparatore personalizzate e strategie di ordinamento stabile.

table.sort con comparatori è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.

Che cos'è table.sort?

table.sort ordina una tabella sul posto utilizzando una funzione di confronto. In assenza di un comparatore, utilizza l'operatore <.

Ordinamento crescente predefinito

Chiami table.sort(t) su una tabella di numeri o stringhe per ordinarla in senso crescente.

local nums = {5, 2, 8, 1, 9}
table.sort(nums)
for _, v in ipairs(nums) do print(v) end

Comparatore personalizzato

Passi come secondo argomento una funzione function(a, b) return a < b end.

local words = {"banana", "apple", "cherry"}
table.sort(words, function(a, b) return a < b end)
print(table.concat(words, ", "))

Ordinamento decrescente

Inverta il confronto per ordinare in senso decrescente.

local nums = {3, 1, 4, 1, 5, 9}
table.sort(nums, function(a, b) return a > b end)
print(table.concat(nums, ", "))

Ordinare le tabelle in base a un campo

Ordini un array di record in base a una specifica chiave di campo.

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) end

Ordinamento con più chiavi

Ordini in base a una chiave primaria e, in caso di parità, a una chiave secondaria.

table.sort(people, function(a, b)
  if a.age ~= b.age then return a.age < b.age end
  return a.name < b.name
end)

Nota sulla stabilità

table.sort di Lua non garantisce la stabilità. Gli elementi equivalenti possono comparire in qualsiasi ordine. Utilizzi un indice come criterio di spareggio per ottenere risultati deterministici.

Ordinamento delle stringhe senza distinzione tra maiuscole e minuscole

Normalizzi con string.lower all'interno del comparatore.

table.sort(words, function(a, b)
  return a:lower() < b:lower()
end)

Ordinamento con estrattore di chiavi

Memorizzi nella cache le chiavi estratte per evitare calcoli ripetuti durante l'ordinamento, utilizzando un approccio basato sulla trasformazione di Schwartz.

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
end

Ordinamento di tabelle di grandi dimensioni

Per tabelle molto grandi, valuti una trasformazione di Schwartz: associ ogni elemento alla relativa chiave di ordinamento, ordini le coppie e infine estragga gli elementi. In questo modo evita di ricalcolare la chiave a ogni confronto.

Sul posto o su una copia

table.sort modifica la tabella originale. Per ordinare una copia, utilizzi prima table.move oppure esegua un'iterazione per crearne un clone, quindi ordini il clone.

Domanda sul comparatore

Quale comparatore ordina i numeri in senso crescente?

Riepilogo: table.sort

table.sort ordina sul posto, accetta un comparatore opzionale, non è stabile e viene comunemente utilizzato con strategie basate sui campi o su più chiavi per gestire requisiti di ordinamento complessi.

Domande Frequenti

La lezione «table.sort con comparatori» è gratuita?

Sì — il testo completo di «table.sort con comparatori» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.

Cosa imparerò in «table.sort con comparatori»?

Ordini le tabelle con funzioni comparatore personalizzate e strategie di ordinamento stabile. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Lua Academy?

Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «table.sort con comparatori»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Lua Academy?

Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. table.sort con comparatori
  2. table.concat e table.move
  3. Copia profonda e copia superficiale
  4. Trasformazione delle tabelle: map, filter, reduce
← Torna a Lua Academy