Słowniki to tabele, które łączą nazwy lub klucze z wartością zamiast indeksu.
Przykład:
Składnia słownika Luaulocal pet = {Name = "Bobbie",Type = "Pies",}
Używaj słowników, gdy musisz etykietować wartości, a nie tylko je wymieniać, jak robi to tablica. Poćwicz korzystanie z 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ą nawiasów klamrowych {}. Pary klucz-wartość są przechowywane w osobnych linijkach, 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 instancji 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 z codziennych zastosowań słowników jest organizowanie informacji o graczach lub postaciach. Te kroki eksplorują, 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, którą powinien mieć wróg. Pamiętaj, klucze powinny zawsze używać tego samego typu danych, ale wartości nie muszą.
local enemy = {Name = "Spike",Health = 1000,}
Używanie wartości słownika
Istnieją dwa sposoby dostępu do wartości słownika:
- tableName["keyName"] (ważne, aby zwrócić uwagę na 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żywać, zazwyczaj zależy od celu tabeli. W przypadku tabel przechowujących zbiór wartości, takich jak lista graczy na serwerze, programiści zazwyczaj używają tableName["keyName"]. W przypadku słownika używanego do opisu obiektu programiści częściej używają tableName.keyName.
Zmień wartość słownika
Zmiana wartości klucza jest taka sama jak w przypadku dowolnej 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)Przeprowadź test 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. Następujący przykład kodu używa zmiennej, aby dodać nazwę gracza jako klucz, gdy dołącza on do doświadczenia, a następnie ustawia wartość jego punktów na 0.
W ServerScriptService stwórz nowy skrypt o nazwie PlayerPoints. W skrypcie pobierz Serwis 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 zdarzeniem 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 Player, oraz polecenie drukowania do testowania.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("Witaj " .. name)endWstaw name do słownika playerPoints jako klucz i ustaw wartość, punkty gracza, na 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("Witaj " .. name)playerPoints[name] = 0endUżyj name, aby wydrukować nazwę gracza, a playerPoints[name], aby wydrukować wartość klucza odpowiadającego zmiennej.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("Witaj " .. name)playerPoints[name] = 0print(name .. " ma " .. playerPoints[name] .. " punktów.")endUruchom projekt i obserwuj wyjście.
Zakończony skrypt
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("Witaj " .. 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 dotyczą używania słowników na różne sposoby. Sprawdź, czy potrafisz rozbudować kod dla tych zadań.
- Stwórz część pułapki, która zadaje obrażenia w czasie. Gdy gracz dotknie pułapki, zadaj mu obrażenia, poczekaj, a następnie pozwól mu na ponowne zranienie.
- 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ć "sekretny" kod. Na przykład, literę "A" można zamienić na "G", lub słowo "jabłko" można zamienić na "pomarańcza".
Słowniki i pairs()
pairs() to funkcja, która często jest używana do iteracji przez słowniki. Przykład jest pokazany poniżej.
local myDictionary = {["Niebianski Gracz"] = "Ana",["Złoty Gracz"] = "Binh",["Czerwony Gracz"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " to " .. value)end
pairs() można używać do pracy z kluczem, wartością lub obydwoma 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,Trochę = 2,}print("Masz:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Po wykonaniu, kod wydrukuje:
Masz:43 Złote Cegły3 Marchewki2 Trochę
Podsumowanie
Słowniki to tabele, które używają par klucz-wartość zamiast wartości indeksowanych. Słowniki i tablice zaczynają się podobnie, przypisując nawiasy klamrowe do zmiennej. Zachowuj wpisy oddzielone 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 przekazać jego cel. Słownik właściwości wroga prawdopodobnie będzie uzyskiwany przy użyciu operatora kropkowego, podczas gdy lista nazw prawdopodobnie użyje tableName[keyName].
Kiedy używasz nawiasów, bądź ostrożny; nazwy kluczy utworzone w tabeli muszą być traktowane jako ciągi: tableName["keyName"]. Jednak gdy odnosisz 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żywać pairs() i ipairs() w pętli for, aby przejść przez każdy element bez znanych punktów początkowych i końcowych. Możesz również używać ogólnej iteracji za pomocą słowa kluczowego in, aby przechodzić przez elementy bez potrzeby używania pairs() lub ipairs().