Słowniki to tabele, które łączą nazwy lub klucze z wartością zamiast indeksu.
Przykład:
local pet = {
Name = "Bobbie",
Type = "Pies",
}Używaj słowników, gdy musisz oznaczyć wartości, a nie tylko je wymieniać w kolejności, jak robi to tablica. Ćwicz używanie słowników w tym samouczku, manipulując wartościami związanymi z graczem.
Składnia słownika
Podobnie jak tablice, słowniki są przypisywane do zmiennej za pomocą klamrowych nawiasów {}. Pary klucz-wartość są przechowywane w osobnych 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łać się do części lub innych obiektów instancjonowanych jako kluczy, użyj nawiasów kwadratowych.
local greenPart = workspace.GreenPart
local redPart = workspace.RedPart
local partList = {
[greenPart] = true,
[redPart] = false,
}
print(partList[redPart])Utwórz słownik
Jednym z codziennych zastosowań słowników jest organizowanie informacji o graczach lub postaciach. Te kroki pokazują, jak teoretyczne informacje o postaci wroga mogą być przechowywane i uzyskiwane.
W nowym skrypcie utwórz słownik o nazwie enemy.
local enemy = {}Pierwszy klucz w słowniku będzie śledził imię wroga za pomocą zmiennej o nazwie Name.
local enemy = {Name}Przypisz imię wroga do klucza, po którym następuje przecinek.
local enemy = {Name = "Spike",}Dodaj drugą parę klucz-wartość dla ilości zdrowia, jaką 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łownika
Istnieją dwa sposoby uzyskiwania dostępu do wartości słownika:
- tableName["keyName"] (ważne, aby zauważyć cudzysłowy)
- tableName.keyName
local enemy = {
Name = "Spike",
Health = 1000,
}
print("Złoczyńca " .. enemy["Name"] .. " zbliża się!")
print("Złoczyńca " .. enemy.Name .. " zbliża się!")Który styl użyć, zazwyczaj zależy od celu tabeli. Dla tabel przechowujących zbiór wartości, takich jak lista graczy na serwerze, programiści zazwyczaj używają tableName["keyName"]. Dla słownika używanego do opisywania obiektu, programiści częściej używają tableName.keyName.
Zmień wartość słownika
Zmiana wartości klucza jest taka sama jak w przypadku każdej innej zmiennej; użyj operatora równości =.
Pod tabelą enemy, ustaw imię wroga na coś innego.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("Imię wroga to " .. enemy.Name)Przetestuj grę i sprawdź okno wyjściowe.
Istniejące zmienne jako klucze
Słowniki mogą współdziałać z istniejącymi zmiennymi zadeklarowanymi w innych częściach skryptu. Poniższy przykład kodu używa zmiennej do dodania imienia gracza jako klucza, gdy dołącza do gry, a następnie ustawia wartość jego punktów na 0.
W ServerScriptService utwórz nowy skrypt o nazwie PlayerPoints. W skrypcie uzyskaj dostęp do usługi Graczy i utwórz pusty słownik o nazwie playerPoints.
local Players = game:GetService("Players")local playerPoints = {}Napisz lokalną funkcję do ustawiania 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 zmienną, aby uzyskać imię gracza, właściwość w każdym obiekcie Player, oraz instrukcję print do testowania.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("cześć " .. name)endWstaw name do słownika playerPoints jako klucz i ustaw wartość, punkty gracza, na 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("cześć " .. name)playerPoints[name] = 0endUżyj name, aby wydrukować imię gracza, a playerPoints[name], aby wydrukować wartość klucza odpowiadającego zmiennej.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("cześć " .. name)playerPoints[name] = 0print(name .. " ma " .. playerPoints[name] .. " punktów.")endUruchom projekt i obserwuj wynik.
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("cześć " .. name)
playerPoints[name] = 0
print(name .. " ma " .. playerPoints[name] .. " punktów.")
end
Players.PlayerAdded:Connect(setPoints)Opcjonalne wyzwania
Poniżej znajdują się wyzwania, które można zastosować do używania słowników w różnych sposób. Sprawdź, czy możesz rozbudować kod dla tych zadań.
- Stwórz pułapkę, która zadaje obrażenia w czasie, gdy gracz ją dotknie. Gdy gracz dotknie pułapki, zadaj mu obrażenia, poczekaj, a następnie pozwól mu ponownie otrzymać obrażenia.
- 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 szyfr, system zamiany jednego ciągu na inny, aby stworzyć "tajny" kod. Na przykład, litera "A" może być zamieniana na "G", lub słowo "jabłko" może być zamieniane na "pomarańczę".
Słowniki i pairs()
pairs() to funkcja, która jest często używana do iteracji przez słowniki. Przykład można zobaczyć poniżej.
local myDictionary = {
["Niebieski Gracz"] = "Ana",
["Złoty Gracz"] = "Binh",
["Czerwony Gracz"] = "Cate",
}
for key, value in pairs(myDictionary) do
print(key .. " to " .. value)
endpairs() można używać do pracy z kluczem, wartością lub oboma elementami słownika. W poniższej pętli for, pierwsza zmienna to klucz. Druga zmienna to wartość. Słownik, z którym chcesz pracować, jest przekazywany do pairs().
local inventory = {
["Złote Cegły"] = 43,
Marchewki = 3,
Latarki = 2,
}
print("Masz:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
endPo wykonaniu kodu zostanie wydrukowane:
Masz:
43 Złote Cegły
3 Marchewki
2 LatarkiPodsumowanie
Słowniki to tabele, które używają par klucz-wartość zamiast wartości indeksowanych. Słowniki i tablice zaczynają się podobnie, przypisując klamrowe nawiasy do zmiennej. Oddzielaj wpisy przecinkami.
Wszystkie klucze w słowniku powinny używać tego samego typu danych, ale wartości mogą mieszać typy danych bez problemu.
Sposób, w jaki uzyskuje się dostęp do słownika, może przekazywać jego cel. Słownik właściwości wroga będzie prawdopodobnie uzyskiwany za pomocą operatora kropki, podczas gdy lista imion będzie prawdopodobnie używać tableName[keyName].
Podczas używania nawiasów kwadratowych, bądź ostrożny; nazwy kluczy utworzone w tabeli muszą być traktowane jako ciągi: tableName["keyName"]. Jednak przy odwoływaniu się do obiektów, takich jak części, cudzysłowy nie są potrzebne: tableName[keyName].
Wiele skryptów musi przechodzić przez słowniki lub tablice, ale nie zawsze możesz znać początek i koniec tych struktur danych. Na przykład, słownik graczy może się zmieniać, lub gracze mogą mieć tablicę ekwipunku o zmiennej wielkości.
W takich sytuacjach możesz użyć pairs() i ipairs() w pętli for, aby przejść przez każdy element bez znanych punktów początkowych i końcowych. Możesz także użyć ogólnej iteracji przez słowo kluczowe in, aby przejść przez elementy bez potrzeby używania pairs() lub ipairs().