0Pricing
Lua Academy · Lezione

Iterare con ipairs

Percorra le sequenze in ordine.

Iterare con ipairs è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 3 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.

Perché usare ipairs

È possibile percorrere una sequenza usando gli indici, ma ipairs è più semplice e sicuro. Fornisce ogni indice e valore nell'ordine corretto.

Inizia dall'indice 1 e si ferma al primo nil, quindi è perfetto per le sequenze prive di buchi.

local fruits = {"apple", "banana", "cherry"}
for i, v in ipairs(fruits) do
  print(i, v)
end

La struttura del ciclo

Il modello è for index, value in ipairs(t) do ... end.

A ogni iterazione, index è la posizione basata su 1 e value è l'elemento che si trova in quella posizione. Non serve alcun contatore manuale.

local colors = {"red", "green", "blue"}
for i, c in ipairs(colors) do
  print("Color", i, "is", c)
end

Ignorare l'indice

Se servono solo i valori, per convenzione assegni il nome _ all'indice, per mostrare che non viene utilizzato.

Il ciclo visita comunque gli elementi nell'ordine basato su 1.

local nums = {10, 20, 30}
local total = 0
for _, n in ipairs(nums) do
  total = total + n
end
print("sum:", total)

Inizia da 1 e si ferma al primo buco

ipairs inizia dall'indice 1 e prosegue finché l'indice successivo non contiene nil.

Se trova un buco, si ferma in quel punto. Perciò ipairs va usato con sequenze ordinate, non con tabelle che presentano posizioni mancanti.

local t = {"a", "b", nil, "d"}
for i, v in ipairs(t) do
  print(i, v)
end

Sommare i valori

Un'operazione frequente consiste nel ridurre una lista a un unico numero, ad esempio una somma o un massimo.

ipairs rende il codice più leggibile: visita ogni valore e lo accumula.

local prices = {3, 7, 2, 9}
local max = prices[1]
for _, p in ipairs(prices) do
  if p > max then max = p end
end
print("max:", max)

Costruire una nuova lista

Combini ipairs con table.insert per trasformare una sequenza in un'altra.

Qui raddoppiamo ogni numero in una nuova tabella, mantenendo l'ordine e gli indici basati su 1.

local src = {1, 2, 3}
local doubled = {}
for _, n in ipairs(src) do
  table.insert(doubled, n * 2)
end
print(doubled[1], doubled[2], doubled[3])

ipairs e pairs a confronto

pairs visita ogni chiave, comprese quelle di tipo stringa, senza un ordine garantito. ipairs visita solo la sequenza di interi 1, 2, 3... in ordine.

Per gli array ordinati, utilizzi ipairs.

local t = {"x", "y"}
t.name = "extra"
for i, v in ipairs(t) do
  print(i, v)
end

Filtrare con una condizione

Utilizzi un if all'interno del ciclo per mantenere solo gli elementi corrispondenti.

Di seguito raccoglieremo in una nuova sequenza le parole più lunghe di tre lettere.

local words = {"hi", "hello", "yo", "howdy"}
local long = {}
for _, w in ipairs(words) do
  if #w > 3 then table.insert(long, w) end
end
print(long[1], long[2])

Cercare un elemento

Per cercare, esegua un ciclo con ipairs e si fermi quando trova l'elemento. L'indice indica la posizione a partire da 1.

Una volta trovato l'obiettivo, usciamo subito dal ciclo con break.

local names = {"Ann", "Bob", "Cy"}
local found = 0
for i, n in ipairs(names) do
  if n == "Bob" then found = i break end
end
print("Bob at index", found)

Contare durante l'iterazione

Può contare le corrispondenze incrementando una variabile all'interno del ciclo.

In questo modo evita di accedere direttamente agli indici, pur analizzando l'intera sequenza.

local marks = {5, 8, 3, 9, 6}
local passes = 0
for _, m in ipairs(marks) do
  if m >= 6 then passes = passes + 1 end
end
print("passing:", passes)

ipairs annidati

Per una tabella di tabelle, annidi due cicli ipairs per visitare ogni cella.

Il ciclo esterno scorre le righe, quello interno le colonne: tutto è indicizzato a partire da 1.

local grid = {{1, 2}, {3, 4}}
for _, row in ipairs(grid) do
  for _, cell in ipairs(row) do
    print(cell)
  end
end

Controllo rapido

Ricordi da dove inizia e dove termina ipairs.

Riepilogo

Ha imparato il modello for i, v in ipairs(t): visita una sequenza in ordine a partire da 1 e si ferma alla prima lacuna.

Lo utilizzi per sommare, filtrare, cercare e trasformare le liste. Nella prossima lezione misurerà la lunghezza con # e ordinerà gli elementi con table.sort.

Domande Frequenti

La lezione «Iterare con ipairs» è gratuita?

Sì — il testo completo di «Iterare con ipairs» è 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 «Iterare con ipairs»?

Percorra le sequenze in ordine. 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 3 di 4.

Quanto tempo richiede la lezione «Iterare con ipairs»?

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. Array come tabelle
  2. Aggiungere e rimuovere elementi
  3. Iterare con ipairs
  4. Lunghezza e ordinamento
← Torna a Lua Academy