Słowniki są tablicami, które łączą nazwy lub klucze z wartością zamiast indeksu.
Przykład:
Syntaxa słownika Luau
local pet = {Name = "Bobbie",Type = "Dog",}
Użyj słowników, gdy musisz oznaczyć wartości, nie tylko je wymienić w kolejności, jak to robi array.Praktykuj używanie słowników w tym samouczku poprzez manipulowanie wartościami związanymi z grą.
Synteza słownika
Podobnie jak w przypadku tablic, słowniki są przypisywane do zmiennej za pomocą kłosowych nawiasów {}. Pary klucz-wartość są przechowywane na oddzielnych liniach, po których następuje przecinek. Klucze i wartości mogą być dowolnym typem danych, w tym ciągami, liczbami i nazwami zmiennych
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Aby odwoływać części lub inne obiekty instancjonowane jako klucze, użyj nawiasów.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Utwórz słownik
Jednym z codziennych użyć słowników jest organizowanie informacji o graczu lub postaci.Te kroki badają, w jaki sposób można przechowywać i uzyskiwać informacje o teoretycznej postaci wroga
W nowym skrypcie utwórz słownik o nazwie enemy.
local enemy = {}Pierwszy klucz w słowniku śledzi nazwę wroga za pomocą zmiennej o nazwie Name.
local enemy = {Name}Nadaj nazwę wroga kluczowi, po którym następuje przecinek.
local enemy = {Name = "Spike",}Dodaj drugą parę klucz-wartość dla tego, ile zdrowia powinien mieć wróg. Pamiętaj, że klucze zawsze powinny używać tego samego typu danych, ale wartości nie muszą.
local enemy = {Name = "Spike",Health = 1000,}
Użyj wartości słownikowych
Istnieją dwa sposoby dostępu do wartości słownika:
- tableName["keyName"] (ważne jest, aby zauważyć cytaty)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
Styl, który należy używać, zależy zwykle od celu tabeli.Dla tabel, które przechowują kolekcję wartości, takich jak lista graczy na serwerze, programiści zwykle używają tableName["keyName"].Dla słownika używanego do opisania obiektu programiści są bardziej prawdopodobni do użycia tableName.keyName .
Zmień wartość słownika
Zmiana wartości klucza jest taka sama jak każda inna zmienna; użyj równego operatora =.
Poniżej tabeli enemy, ustaw nazwę wroga na coś innego
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Wykonaj test i sprawdź okno wyjściowe.
Wcześniej istniejące zmienne jako klucze
Słowniki mogą wchodzić w interakcję z wcześniej istniejącymi zmiennymi deklarowanymi w innych częściach skryptu.Poniższy przykład kodowania używa zmiennej, aby dodać nazwę gracza jako klucz, gdy dołączą do doświadczenia, a następnie ustawia wartość punktów na 0.
W ServerScriptService stwórz nowy skrypt o nazwie PlayerPoints.W skrypcie uzyskaj usługę Graczy i stwórz pusty słownik o nazwie playerPoints.
local Players = game:GetService("Players")local playerPoints = {}Zaprogramuj lokalną funkcję do ustawiania punktów gracza za pomocą parametru dla nowej zmiennej gracza. Połącz funkcję z wydarzeniem Players.PlayerAdded.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)W funkcji dodaj zmienną, aby uzyskać Name gracza, właściwość w każdym obiekcie Gracz i oświadczenie o drukowaniu do testowania.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endWpisz name do słownika playerPoints jako klucz i ustaw wartość, punkty gracza, na 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endUżyj name do wydrukowania nazwy gracza i playerPoints[name] do wydrukowania wartości klucza pasującego do zmiennej.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")endUruchom projekt i obserwuj wynik.
Zakończony skrypt
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("hello " .. name)
playerPoints[name] = 0
print(name .. " has " .. playerPoints[name] .. " points.")
end
Players.PlayerAdded:Connect(setPoints)
Opcjonalne wyzwania
Poniżej znajdują się niektóre wyzwania związane z wykorzystaniem słowników w różny sposób. Zobacz, czy możesz opracować kod dla nich.
- Stwórz część pułapki, która zadaje obrażenia z czasem graczu. Po dotknięciu przez gracza pułapki zadaj mu obrażenia, poczekaj, a następnie pozwól mu zostać ponownie zranionym.
- Utwórz funkcję, która sprawdza, który z dwóch graczy ma najwięcej punktów, uzyskując dostęp do słownika.
- Stwórz szyfrowanie, system zamiany jednej linii na inną, aby stworzyć "tajny" kod.Na przykład, litera "A" może zostać zamieniona na "G", a słowo "jabłko" może zostać zamienione na "pomarańcz".
Słowniki i pary ()
pairs() to funkcja, która często jest używana do iterowania przez słowniki . Poniżej jest przykład.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() można użyć do pracy z kluczem, wartością lub obu elementów słownika.W pętli for poniżej pierwsza zmienna jest kluczem.Drugą zmienną jest wartość.Słownik, z którym chcesz pracować, jest przekazywany do pairs() .
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Po wykonaniu kod wyświetli następujące:
You have:43 Gold Bricks3 Carrots2 Torches
Podsumowanie
Słowniki to tabele, które używają pary klucz-wartość zamiast indeksowanych wartości.Słowniki i tablice zaczynają podobnie, przypisując klamry krzywe do zmiennej.Rozdzielaj wpisy za pomocą przecinków.
Wszystkie klucze w słowniku powinny używać tego samego typu danych, ale wartości mogą miksować typy danych bez problemu.
Sposób, w jaki słownik jest dostępny, może przekazać jego cel.Słownik właściwości wroga prawdopodobnie będzie dostępny za pomocą operatora punktu, podczas gdy lista nazw prawdopodobnie użyje tableName[keyName].
Używając nawiasów, bądź ostrożny; nazwy kluczy utworzone w tabeli muszą być traktowane jako ciągi: tableName["keyName"].Jednak gdy odwołujesz się do obiektów takich jak części, nie są potrzebne cytaty: tableName[keyName].
Wiele skryptów musi przejść przez słowniki lub tablice, ale możesz nie zawsze wiedzieć o początku i końcu tych struktur danych.Na przykład, słownik graczy może się zmieniać, albo gracze mogą mieć ekwipunek zmiennych rozmiarów.
W tych sytuacjach możesz użyć pairs() i ipairs() w pętli for w celu przejścia przez każdy element bez znanych punktów początku i końcaMożesz również użyć ogólnego cyklu za pomocą klucza in , aby przetoczyć elementy bez potrzeby pairs() lub ipairs().