典典是擁有索引的表,而不是索引。
範例:
Lua 字典語法
local pet = {Name = "Bobbie",Type = "Dog",}
使用字典,當您需要標記值時,而不是單獨將它們列出作為陣列所做的那樣 - 使用此教學中與玩家關聯的值來練習使用字典。
字典語法
喜歡陣列、字典會分配在 {} 條箭頭。 關鍵值組 存在在單獨的行跟隨一個空格。 鑰匙和值可以是任何資料輸入,包括字串、數字和變量名。
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 來命名。對於描述對物件的字典,資料庫通常會使用 tableName 。keyName。
變更字典值
變更鍵的值與任何其他變數相同;使用等等 = 操作器。
在 enemy 桌子底下,將敵人的名稱變更為其他名稱。
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)測試輸出窗口,並檢查輸出窗口。
以前存在的變量作為鑰匙
典禮可以與指定於其他部分的指令碼互動。下列程式碼範例使用變數來添加玩家的名稱作為鑰匙,當玩家加入體驗後,設定他們的點值為 0 並將其重設為 0。
在 ServerScriptService 中,創建名為 PlayerPoints 的新指令。在指指令碼中,取得玩家服務,並且創建名為 playerPoints 的空白典藏。
local Players = game:GetService("Players")local playerPoints = {}為新玩家變量設定玩家點數的本地函數。連接函數到 Players.PlayerAdded 事件。
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)在 function 中,add 一個變數來取得玩家的 Name ,每個 玩家 對物件的屬性,以及測試的打印語句。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)end將名稱插入 playerPoints 字典作為鍵,並將值設為玩家的點數,然後將其設置為 0。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0end使用 name 列印玩家和玩家點數[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() 是一種常用的函數,可以在 字典 中重複。 一個例子在下面顯示。
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
摘要
典型將鍵值對作為索引值而不是列表值使用。典型和陣列的順序與索引值相同,請將入口分開使用分號。
典型中的所有鑰匙都應該使用相同的資料輸入,但值可以混合資料類型,沒有問題。
典型的方式來存取字典可以傳達字典的目的。敵人屬性的字典可能會使用 dot 運算器,而名稱列表可能會使用 tableName[keyName]。
使用括號時,請小心;表中創建的鑰匙名稱必須作為字串來處理:tableName["keyName"]。但是,當參考零件等對象時,引用括號不是必要的:tableName[keyName]。
許多指令碼需要穿過字典或陣列,但您可能不會總是知道這些資料結構的開始和結束。例如,玩家的字典可能會變更,或玩家可能有一個陣列的多種尺寸。
在這些情況下,您可以使用 pairs() 和 ipairs() 在 for 循環中通過每個元素,不需要開始和結束點。您也可以使用通用 1> in1> 字元來循環通過元素,而不需要開始和結束點。