Wprowadzenie do słowników

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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.GreenPart
local redPart = workspace.RedPart
local 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

  1. W nowym skrypcie utwórz słownik o nazwie enemy.


    local enemy = {
    }
  2. Pierwszy klucz w słowniku śledzi nazwę wroga za pomocą zmiennej o nazwie Name.


    local enemy = {
    Name
    }
  3. Nadaj nazwę wroga kluczowi, po którym następuje przecinek.


    local enemy = {
    Name = "Spike",
    }
  4. 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 =.

  1. 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)
  2. 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.

  1. 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 = {
    }
  2. 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)
    end
    Players.PlayerAdded:Connect(setPoints)
  3. 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.Name
    print("hello " .. name)
    end
  4. Wpisz name do słownika playerPoints jako klucz i ustaw wartość, punkty gracza, na 0.


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    playerPoints[name] = 0
    end
  5. Uż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.Name
    print("hello " .. name)
    playerPoints[name] = 0
    print(name .. " has " .. playerPoints[name] .. " points.")
    end
  6. Uruchom 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) do
print(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) do
print(itemValue, itemName)
end

Po wykonaniu kod wyświetli następujące:


You have:
43 Gold Bricks
3 Carrots
2 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().