Iterowanie za pomocą pairs()
Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 1 z 54.
pairs() umożliwia to, pozwalając przejść przez wszystkie wpisy w tabeli, niezależnie od typu kluczy.Składnia używania pairs() w pętli for wygląda tak:for key, value in pairs(myTable) do
-- użyj tutaj key i value
endpairs() udostępnia zarówno klucz, jak i odpowiadającą mu wartość. Oznacza to, że możesz uzyskać dostęp do obu tych informacji i pracować z nimi jednocześnie.Oto praktyczny przykład z ekwipunkiem gracza:local inventory = {
sword = 1,
potion = 5,
gold = 150
}
for item, quantity in pairs(inventory) do
print(item .. ": " .. quantity)
endpairs() działa z kluczami dowolnego typu, w tym ciągami znaków, liczbami, a nawet innymi tabelami.Wyzwanie: budowanie ciągu znakówW poniższym wyzwaniu masz zwrócić każdy wpis jako jeden ciąg znaków, więc przypomnijmy sobie dwa narzędzia do pracy z ciągami znaków z kursu Podstawy. Łączysz ciągi znaków za pomocą operatora konkatenacji, czyli dwóch kropek (..). Na przykład "Hello" .. " " .. "World" daje w wyniku "Hello World".Jeśli chcesz sformatować tekst w kilku wierszach, możesz użyć znaku ucieczki nowej linii "\n". Gdy Lua napotka "\n" wewnątrz ciągu znaków, traktuje go jako polecenie przejścia do następnego wiersza.Na przykład print("Line 1\nLine 2") wyświetli:Line 1
Line 2Wyzwanie
ŁatwyNapisz funkcję printInventory, która przyjmuje tabelę inventory i zwraca sformatowany ciąg znaków zawierający wszystkie przedmioty i ich ilości.
Użyj pairs(), aby iterować po tabeli ekwipunku i zbudować ciąg, w którym każdy wiersz zawiera nazwę przedmiotu, a po niej jego ilość w formacie item: quantity. Każdy przedmiot powinien znajdować się w osobnym wierszu.
Aby umieścić każdy przedmiot w osobnym wierszu, użyj znaku nowej linii "\n" między wpisami. Na przykład "apple: 5\nbanana: 3" zostanie wyświetlone w dwóch osobnych wierszach. Uważaj, aby nie dodawać początkowego "\n" przed pierwszym przedmiotem: dodawaj go tylko między przedmiotami.
Parametry:
inventory(tabela): Tabela w stylu słownika, w której kluczami są nazwy przedmiotów (ciągi znaków), a wartościami ich ilości (liczby)
Zwraca: Ciąg znaków zawierający każdy przedmiot i jego ilość w osobnym wierszu, rozdzielone znakiem "\n". Przykładowy wynik dla {apple=5, banana=3}:apple: 5banana: 3
Spróbuj swoich sił
function printInventory(inventory)
-- Aby sformatować wynik, możesz łączyć ciągi znaków za pomocą operatora '..'.
-- Aby dodać nowy wiersz, użyj znaku specjalnego '\n'.
-- Może być potrzebny sposób na śledzenie, czy dodajesz pierwszy element, czy kolejny,
-- aby zdecydować, czy dodać przed nim znak nowego wiersza.
-- Wpisz kod tutaj
endTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Zaawansowane iterowanie po tabelach
Iterowanie za pomocą pairs()Iterowanie za pomocą ipairs()pairs() a ipairs()Powtórka — karta postaci2Więcej funkcji biblioteki table
table.concat()Tworzenie tabel i unpack()table.sort()Sortowanie niestandardowe za pomocą funkcjiPodsumowanie — tablica najlepszych wyników5Projekt: silnik tekstowej gry przygodowej
Konfiguracja projektu: pokójŁączenie pokoiPoćwicz samodzielnie: Kompilator Lua online