Iterowanie za pomocą ipairs
Przeiteruje Pan/Pani po sekwencjach w kolejności.
Iterowanie za pomocą ipairs to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Dlaczego ipairs
Przechodzenie po sekwencji według indeksu działa, ale ipairs jest czytelniejsze i bezpieczniejsze. Przekazuje ono każdy indeks i wartość w odpowiedniej kolejności.
Zaczyna od indeksu 1 i zatrzymuje się przy pierwszym nil, dzięki czemu idealnie nadaje się do sekwencji bez luk.
local fruits = {"apple", "banana", "cherry"}
for i, v in ipairs(fruits) do
print(i, v)
endSchemat pętli
Wzorzec ma postać for index, value in ipairs(t) do ... end.
Podczas każdego przebiegu index oznacza pozycję indeksowaną od 1, a value jest znajdującym się na niej elementem. Nie jest potrzebny ręczny licznik.
local colors = {"red", "green", "blue"}
for i, c in ipairs(colors) do
print("Color", i, "is", c)
endPomijanie indeksu
Jeśli potrzebne są tylko wartości, zgodnie z konwencją należy nazwać indeks _, aby zaznaczyć, że nie jest używany.
Pętla nadal odwiedza elementy w kolejności indeksowanej od 1.
local nums = {10, 20, 30}
local total = 0
for _, n in ipairs(nums) do
total = total + n
end
print("sum:", total)Zaczyna od 1 i zatrzymuje się na luce
ipairs zaczyna od indeksu 1 i działa, dopóki następny indeks ma wartość inną niż nil.
Jeśli wystąpi luka, zatrzymuje się w tym miejscu. Dlatego ipairs służy do obsługi spójnych sekwencji, a nie tabel z brakującymi pozycjami.
local t = {"a", "b", nil, "d"}
for i, v in ipairs(t) do
print(i, v)
endSumowanie wartości
Częstym zadaniem jest zredukowanie listy do jednej liczby, na przykład obliczenie sumy lub maksimum.
ipairs sprawia, że taki kod jest czytelny: odwiedza się każdą wartość i dodaje ją do wyniku.
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)Budowanie nowej listy
Połączenie ipairs z table.insert pozwala przekształcić jedną sekwencję w inną.
W tym przykładzie podwajamy każdą liczbę i zapisujemy ją w nowej tabeli, zachowując kolejność oraz indeksowanie od 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 a pairs
pairs odwiedza każdy klucz, w tym klucze będące łańcuchami znaków, w kolejności, której nie gwarantuje. ipairs przechodzi tylko po sekwencji liczb całkowitych 1, 2, 3... w tej kolejności.
W przypadku uporządkowanych tablic należy użyć ipairs.
local t = {"x", "y"}
t.name = "extra"
for i, v in ipairs(t) do
print(i, v)
endFiltrowanie za pomocą warunku
Należy użyć instrukcji if wewnątrz pętli, aby zachować tylko pasujące elementy.
Poniżej zbieramy słowa dłuższe niż trzy litery do nowej sekwencji.
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])Znajdowanie elementu
Aby wyszukać element, należy iterować za pomocą ipairs i zatrzymać się po jego znalezieniu. Indeks wskazuje pozycję numerowaną od 1.
Po pojawieniu się szukanego elementu wcześniejszy zwrot wykonujemy za pomocą 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)Zliczanie podczas iteracji
Liczbę pasujących elementów można zwiększać wewnątrz pętli.
Dzięki temu nie trzeba bezpośrednio operować indeksami, a jednocześnie można przeskanować całą sekwencję.
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)Zagnieżdżone ipairs
W przypadku tabeli tabel należy zagnieździć dwie pętle ipairs, aby odwiedzić każdą komórkę.
Pętla zewnętrzna przechodzi po wierszach, a wewnętrzna po kolumnach — wszystkie indeksy zaczynają się od 1.
local grid = {{1, 2}, {3, 4}}
for _, row in ipairs(grid) do
for _, cell in ipairs(row) do
print(cell)
end
endSzybkie sprawdzenie
Proszę przypomnieć sobie, gdzie zaczyna się i kończy działanie ipairs.
Podsumowanie
Poznali Państwo wzorzec for i, v in ipairs(t): odwiedza on elementy sekwencji w kolejności z indeksami zaczynającymi się od 1 i zatrzymuje się na pierwszej luce.
Można go używać do sumowania, filtrowania, wyszukiwania i przekształcania list. Następnie długość będzie mierzona za pomocą #, a elementy porządkowane za pomocą table.sort.
Często zadawane pytania
Czy lekcja „Iterowanie za pomocą ipairs” jest bezpłatna?
Tak — pełny tekst „Iterowanie za pomocą ipairs” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Iterowanie za pomocą ipairs”?
Przeiteruje Pan/Pani po sekwencjach w kolejności. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Iterowanie za pomocą ipairs”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Tablice jako tabele
- Dodawanie i usuwanie elementów
- Iterowanie za pomocą ipairs
- Długość i sortowanie