辭典是表,將名稱或 鑰匙 與值相關聯,而不是與索引。
例子:
Luau 辭典語法
local pet = {Name = "Bobbie",Type = "Dog",}
當您需要標籤值時,請使用辭典,而不是只將它們按順序列出,像 array 一樣。在這個教學中練習使用辭典,操縱與玩家相關的值來操作。
辭典語法
像陣列一樣,辭典被分配給變量,使用捲髮括號 {}。 鑰匙值對雙方 被儲存在分開的線上,隨後跟隨逗號。鍵和值可以是任何數據類型,包括字串、數字和變量名稱。
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
要作為鑰匙引用零件或其他實例對象,請使用括號。
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
建立辭典
每天使用辭典的一個常見用途是整理玩家或角色資訊。這些步驟探索如何儲存和存取理論敵人角色的資訊。
在新的腳本中,創建名為 enemy 的辭典。
local enemy = {}字典中的第一個鑰匙將使用變量 Name 來跟蹤敵人的名稱。
local enemy = {Name}為鑰匙指定一個敵人名稱,然後加上一個逗號。
local enemy = {Name = "Spike",}添加第二個鑰匙值對,用於記錄敵人應該擁有的生命值。請記住,鑰匙應該總是使用相同的數據類型,但值不必。
local enemy = {Name = "Spike",Health = 1000,}
使用字典值
有兩種方法可以存取辭典值:
- tableName["keyName"] (重要的是,注意引言)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
使用哪種風格通常取決於桌子的目的。對於包含一個列表玩家的伺服器中的值集的表,程式員通常會使用 tableName["keyName"] 。對於用於描述對象的辭典,程式員更可能使用 tableName.keyName 。
更改辭典值
變更鑰匙值與任何其他變量相同;使用等值 = 運算符。
在 enemy 桌子下,將敵人的名稱設為其他東西
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)進行測試並檢查輸出窗口。
已存在的變量作為鑰匙
辭典可以與其他部分的腳本中已宣言的預存變量互動。下面的編碼範例使用變量將玩家的名稱作為鑰匙加入體驗,然後將他們的點值設為 0。
在 伺服器腳本服務 中,創建一個名為 PlayerPoints 的新腳本在腳本中,獲取玩家服務並創建一個名為 playerPoints 的空字典。
local Players = game:GetService("Players")local playerPoints = {}為新玩家變量設置玩家點的本地函數編寫代碼,並將函數連接到 Players.PlayerAdded 事件。
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)在函數中,添加變量以獲得玩家的 Name ,每個 玩家 對象的屬性,以及用於測試的打印聲明
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)end將 name 插入到 playerPoints 字典中作為鑰匙,並將值設為玩家的點數 0。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0end使用 name 列印玩家的名稱,並使用 playerPoints[name] 列印匹配變數的鑰匙值。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")end執行項目並觀察輸出。
完成腳本
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)
可選挑戰題
以下是一些使用字典以不同方式的挑戰。看看你能否為它們編寫代碼。
- 創建一個陷阱部件,對玩家造成隨時間增加的傷害。一旦玩家觸碰到陷阱,傷害他們,等待,然後允許他們再次受到傷害
- 創建一個函數,可以通過存取字典來檢查兩名玩家中哪一名擁有最多點數。
- 創建一個加密,一個系統可以將一個字串換成另一個字串來創建一個「秘密」代碼。例如,字母「A」可以與「G」交換,或者「蘋果」字可以與「橘色」字交換。
詞典和 pairs()
pairs() 是一個常用於循環通過 辭典 的功能。下面提供了一個例子
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() 可用於與辭典元素的鑰匙、值或兩者工作。以下的 for 循環中,第一個變量是鑰匙。第二個變量是值。你想使用的辭典傳送到 pairs() 。
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
執行時,代碼會列印以下內容:
You have:43 Gold Bricks3 Carrots2 Torches
簡介
辭典是使用鑰匙值對值而不是索引值的表。辭典和陣列以相同方式開始,即指派捲髮括號給變量。以逗號將輸入分開。
辭典內的所有鍵應使用相同的數據類型,但值可以混合數據類型而無問題。
字典的存取方式可以傳達其目的。敵方屬性辭典可能使用點號運算符來存取,而名單可能使用 tableName[keyName] 。
當使用括號時,請小心;表內創建的鍵名必須被視為字串:tableName["keyName"]。但當參考零件等物件時,引用符不需要:tableName[keyName]。
許多腳本需要通過辭典或陣列進行,但你可能不總能知道這些數據結構的開始和結束。例如,玩家辭典可能正在更新,或玩家可能擁有不同尺寸的數組庫存。
在這些情況下,您可以使用 pairs() 和 ipairs() 在 for 循環中穿過每個元素,而不需要知道起點和結點。您也可以使用通用循環通過 in 關鍵字來循環通過元素,而無需使用 pairs() 或 ipairs() 。