Słowniki są tablicami, które łączą nazwy lub klucze z wartością zamiast indeksu.
Przykład:
Syntax 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, manipulując wartościami związanymi z graczem.
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 wpisywaćdanych, w tym strunami, 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
Codzienne użycie słowników polega na organizowaniu informacji o graczu lub postaci.Te kroki badają, w jaki sposób można przechować i uzyskać informacje o teoretycznej postaci wroga.
W nowym skrypcie utwórz słownik o nazwie enemy.
local enemy = {}Pierwszy klucz w słowniku śledzi nazwę wróg, przeciwnikza 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ę kluczowo-wartościową dla tego, ile zdrowia powinien mieć wróg. Pamiętaj, że klucze zawsze powinny używać tego samego wpisywaćdanych, ale wartości nie muszą.
local enemy = {Name = "Spike",Health = 1000,}
Użyj wartości słownika
Istnieją dwa sposoby uzyskiwania wartości słownika:
- tableName["keyName"] (ważne, zauważ cytaty)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
Wybór stylu zazwyczaj zależy 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 operatora równego =.
Pod tabelą enemy ustaw nazwę wróg, przeciwnikna coś innego.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Przetestuj i sprawdź okno wyjściowe.
Wcześniej istniejące zmienne jako klucze
Słowniki mogą wchodzić w interakcję z wcześnie 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 ich wartość punktów na 0.
W ServerScriptService , utwórz nowy skrypt o nazwie PlayerPoints.W skrypcie uzyskaj usługę Graczy i utwórz pusty słownik o nazwie playerPoints.
local Players = game:GetService("Players")local playerPoints = {}Koduj 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 drukujące do testowania.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endWprowadź 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.")endWykonaj 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.
- Stwó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 wymiany jednej linii na inną, aby stworzyć "tajny" kod.Na przykład, litera "A" może zostać zamieniona na "G", a słowo "apple" może zostać zamienione na "orange".
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.Druga zmienna to 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 wydrukuje obserwuje:
You have:43 Gold Bricks3 Carrots2 Torches
Podsumowanie
Słowniki są tablicami, które używają pary klucz-wartość zamiast indeksowanych wartości.Słowniki i tablice zaczynają podobnie przypisując klamry krzywe do zmiennej.Oddzielaj wpisy za pomocą przecinków.
Wszystkie klucze w słowniku powinny używać tego samego wpisywaćdanych, ale wartości mogą mieszać typy danych bez problemu.
Sposób dostępu do słownika 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].
Podczas używania nawiasów uważaj; nazwy kluczy utworzone w tabeli muszą być traktowane jako ciągi: tableName["keyName"] .Jednak przy odwoływaniu 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ć, a gracze mogą mieć ekwipunek arkuszy o różnych rozmiarach.
W tych sytuacjach możesz użyć pairs() i ipairs() w pętli for, aby przejść przez każdy element bez znanych punktów początku i końca.Możesz również użyć ogólnego cyklu za pomocą klucza in , aby przetoczyć elementy bez potrzeby pairs() lub ipairs().