Dyktonary są tabelami, które łączą nazwy lub „klucze**” z wartością zamiast indeksu.
Przykład:
Syntaxy dyktora Lua
local pet = {Name = "Bobbie",Type = "Dog",}
Używaj słowników, gdy musisz oznaczyć wartości, nie tylko je wymieniać w tabeli jako uczynić to, co matematycznie jest równe — ćwicz używanie słowników w tym samouczniku poprzez manipulację wartościami związanymi z graczem.
Znacznik Syntax
Podobnie jak w przypadku tabel, dziesięciorysy są przydzielane do zmiennej z podwójnymi nawiasami {} . Wartości kluczowe pary są przechowywane na oddzielnych linijkach poprzedzonych przez komę. Klucze i wartości mogą być dowolnym wpisywaćdanych, w tym struny, liczby i nazwy zmienne.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Aby odnieść się do części lub innych instancji obiektów jako kluczy, użyj nawiasów.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Tworzenie słownika
Jednym codziennym użyciem słowników jest organizacja informacji gracza lub postaci. Te kroki zbierają informacje o tym, jak informacje teoretycznego wroga mogą być przechowywane i uzyskiwać dostęp.
W nowym skrypcie utwórz słownik o nazwie enemy .
local enemy = {}Pierwszy klucz w słowniku śledzi imię wróg, przeciwnikza pomocą zmiennej nazyjącej się Name .
local enemy = {Name}Przydziel imieniu wrogowi klucz, następnie kropkę.
local enemy = {Name = "Spike",}Dodaj drugą p parametru kluczowego dla ilości zdrowia, która powinna mieć wrogowie. Pamiętaj, że klucze zawsze muszą używać tego samego wpisywaćdanych, ale wartości nie muszą.
local enemy = {Name = "Spike",Health = 1000,}
Używanie wartości słownika
Są dwa sposoby na dostęp do wartości słownika: tableName["keyName"] -- Zauważ pytania tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
Styl używany zwykle zależy od celu tabeli. Dla tabel, które zawierają kolekcję wartości, taką jak lista graczy na serwerze, kodowanie zwykle używa tabelName ["keyName"). Dla słownika używającego do opisywania obiektu kodowanie prawdopodobnie będzie używać tabelName.keyName.
Zmiana wartości słownika
Zmiana wartości klucza jest taka sama jak każda inna zmiana wartości; użyj równego operтора =.
Pod tabelą enemy ustaw imię wróg, przeciwnikna coś innego.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Zacznij testowanie i sprawdź okno Wyjścia.
Gotowe zmienne jako klucze
Dyktykony mogą wchodzić w interakcję z już istniejącymi zmiennymi zadeklarowanymi w innych częściach skryptu. Poniższy przykład kodowania używa zmiennej, aby dodać imię gracza jako klucz, gdy dołączą do doświadczenia i następnie ustawić ich wartość punktów na 0.
W ServerScriptService utwórz nowy skrypt nazyający się PlayerPoints. W skrypcie uzyskaj usługę Players i utwórz pusty słownik nazyający się playerPoints .
local Players = game:GetService("Players")local playerPoints = {}Zakoduj lokalną funkcję ustawienia punktów gracza z parametrem dla nowej zmiennej gracza. Połącz funkcję z wydarzeniem Players.PlayerAdded.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)W funkcji dodaj zmienne, aby uzyskać gracza Name , właściwość w każdym graczu obiektu i drukową deklarację testową.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endWpisz nazwę w playerPoints słowniku jako klucz i ustaw wartość, punkty gracza, na 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endUżyj name , aby wydrukować imię gracza i playerPoints[name], aby wydrukować wartość klucza odpowiadającą zmiennej.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")endZacznij projekt i spójrz na edytor wyników.
Ukoń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 używaniem słowników w różny sposób. Zobacz, czy możesz zbudować kod dla tych.
- Utwórz część pułapki, która z czasem zadaje obrażenia graczowi. Gdy gracz dotyka pułapki, zadaj im obrażenia, poczekaj, a następnie pozwól im być uszkodzeni ponownie.
- Utwórz funkcję, która sprawdza, który z dwóch graczy ma najwięcej punktów poprzez dostęp do słownika.
- Utwórz zaszyfrowanie, system zamiany jednego słowa na inne, aby stworzyć kod "tajny", na przykład, jak litera "A" może być zamieniona na "G", lub jak słowo "jabłko" może być zamienione na słowo "pomarańcz".
Słowniki i pary()
pairs() jest funkcją, która jest często używana do przeszukiwania poprzez słowniki . Przykład jest widoczny poniżej.
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żywać do pracy z kluczem, wartości lub obu elementu dizektora. W pętli for poniżej pierwsza zmienne jest kluczem. Druga zmiana jest wartością. Dizektor, 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
Kiedy zostanie wykonany, kod wydrukuje obserwuje:
You have:43 Gold Bricks3 Carrots2 Torches
Podsumowanie
Słowniki są tablami, które używają pary kluczowych wartości zamiast kluczowych wartości. Słowniki i matryce rozpoczynają się podobnie poprzez przypisanie spiralnych nawiasów zmiennej. Rozdzielaj wpisy za pomocą kropki.
Wszystkie klucze w słowniku powinny używać tego samego wpisywaćdanych, ale wartości mogą mieszać rodzaje danych bez problemu.
Styl, w jaki dostępny jest słownik, może przekazać cel słownika. Lista imion będzie prawdopodobnie dostępna za pomocą operatora kropki, podczas gdy lista nazw będzie prawdopodobnie używać tableName[keyName].
Podczas używania nawiasów uważaj; nazwy kluczy stworzone w tabeli muszą być traktowane jako ciągi: tableName["keyName"] . jednak, gdy odnosi się do obiektów, takich jak części, nie są wymagane cytaty: tableName[keyName] .
Wiele skryptów musi przejść przez słowniki lub matryce, ale możesz nie znać zawsze początku i końca tych struktur danych. Na przykład dyktoria graczy mogą się zmieniać, a gracze mogą mieć listę matryc w różnych rozmiarach.
W tych sytuacjach możesz użyć pairs() i ipairs() w pętli for, aby przejść każdy element bez znanych punktów początku i końca. Możesz również użyć ogólnego cyklu poprzez słowo kluczowe 1> in1> , aby prze