Menu
CoddyTech

Sygnatury indeksów

Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 78 z 80.

Typy map, takie jak {[string]: number}, poznaliśmy już w rozdziale o tabelach: to sygnatura indeksu: dowolny klucz tekstowy wskazuje wartość liczbową. Sprawdzają się świetnie, gdy podczas pisania kodu nie znasz jeszcze kluczy: liczniki, ustawienia, pamięci podręczne, wyniki — wszystko, co jest gromadzone w czasie działania programu.

type Counts = {[string]: number}

local counts: Counts = {}
counts["potion"] = 3   -- dozwolony jest dowolny klucz typu string
counts["sword"] = 1
counts["potion"] += 1  -- wartości są sprawdzane jako liczby

Podczas pracy z mapami ważne są dwa fakty dotyczące działania programu. Po pierwsze, odczytanie klucza, któremu nigdy nie przypisano wartości, zwraca nil: klasyczny wzorzec zliczania obsługuje tę sytuację za pomocą or, zamieniając „brak” na 0:

counts[item] = (counts[item] or 0) + 1

Po drugie, pairs() iteruje po kluczach mapy w nieokreślonej kolejności: dwukrotne uruchomienie tego samego programu może odwiedzić klucze w różnej kolejności. Gdy wynik musi być przewidywalny, zbierz klucze w tablicy, posortuj je za pomocą table.sort i zamiast tego iteruj po posortowanej tablicy:

local keys: {string} = {}
for key in pairs(counts) do
    table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
    print(`{key}: {counts[key]}`)
end
challenge icon

Wyzwanie

Łatwy

Przechowuj wyniki graczy, których imion nie znasz z góry.

  1. Napisz type Scores = {[string]: number} i utwórz local scores: Scores = {}.
  2. Dodaj punkty: scores["mia"] = (scores["mia"] or 0) + 5, a następnie zrób to samo dla "leo", dodając 3.
  3. Wypisz scores["mia"], scores["leo"] i scores["zed"].

Naciśnij Uruchom kod: wynik pokazuje 5, 3 i nil.

Spróbuj swoich sił

-- 1) type Scores = {[string]: number}, następnie local scores: Scores = {}
-- 2) dodaj 5 punktów dla "mia" i 3 dla "leo"
-- 3) wypisz mia, leo i zed

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online