字典是將名稱或 鍵 與值關聯的表,而不是索引。
範例:
Luau 字典語法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("反派 " .. enemy["Name"] .. " 接近!")print("反派 " .. enemy.Name .. " 接近!")
使用哪種風格通常取決於表的目的。對於持有值集合的表,如伺服器中的玩家列表,程序員通常使用 tableName["keyName"]。對於用於描述對象的字典,程序員更可能使用 tableName.keyName。
更改字典值
更改鍵的值與任何其他變量相同;使用等號 = 操作符。
在 enemy 表下,將敵人的名字設置為其他名稱。
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("敵人的名字是 " .. enemy.Name)進行遊戲測試並檢查輸出窗口。
與預先存在的變量作為鍵
字典可以與在腳本其他部分宣告的預先存在的變量交互。以下代碼範例使用變量在玩家加入體驗時將其名字添加為鍵,然後將其得分值設置為0。
在 ServerScriptService 中,創建一個名為 PlayerPoints 的新腳本。在腳本中,獲取 Players 服務並創建一個空字典,命名為 playerPoints。
local Players = game:GetService("Players")local playerPoints = {}編寫一個本地函數,用於設置玩家的得分,並為新玩家變量設置參數。將函數連接到 Players.PlayerAdded 事件。
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)在函數中,添加一個變量以獲取玩家的 Name,這是每個 Player 對象中的一個屬性,並添加一個打印語句以進行測試。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("你好 " .. name)end將 name 插入到 playerPoints 字典中作為鍵,並將值(玩家的點數)設置為0。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("你好 " .. name)playerPoints[name] = 0end使用 name 打印玩家的名字,並使用 playerPoints[name] 打印與該變量匹配的鍵的值。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("你好 " .. name)playerPoints[name] = 0print(name .. " 有 " .. playerPoints[name] .. " 點數。")end運行項目並觀察輸出。
完成的腳本
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("你好 " .. name)
playerPoints[name] = 0
print(name .. " 有 " .. playerPoints[name] .. " 點數。")
end
Players.PlayerAdded:Connect(setPoints)
可選挑戰
以下是一些與使用字典不同方式相關的挑戰。看看你能否為這些挑戰建立代碼。
- 創建一個陷阱部分,對玩家造成隨著時間推移的傷害。一旦玩家觸摸陷阱,則對其造成傷害,等待,然後允許他們再次受到傷害。
- 創建一個函數,檢查兩個玩家中誰的得分較高,通過訪問一個字典來完成。
- 創建一種密碼系統,通過將一個字符串與另一個字符串交換來創建“秘密”代碼。例如,字母“A”可以與“G”交換,或者單詞“apple”可以與“orange”交換。
字典和 pairs()
pairs() 是一個經常用於遍歷 字典 的函數。以下是一些示例。
local myDictionary = {["藍隊玩家"] = "Ana",["金隊玩家"] = "Binh",["紅隊玩家"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " 是 " .. value)end
pairs() 可用於處理字典元素的鍵、值或兩者。在下面的 for 循環中,第一個變量是鍵。第二個變量是值。你想操作的字典被傳遞給 pairs()。
local inventory = {["金磚"] = 43,胡蘿蔔 = 3,火把 = 2,}print("你擁有:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
執行時,代碼將打印以下內容:
你擁有:43 金磚3 胡蘿蔔2 火把
總結
字典是使用鍵值對而不是索引值的表。字典和數組的開頭相似,都是用大括號賦值給變量。保持條目之間用逗號分隔。
字典內的所有鍵應使用相同的數據類型,但值可以自由混合數據類型。
訪問字典的方式可以傳達其目的。敵人物件的字典可能使用點運算符訪問,而名稱列表則可能使用 tableName[keyName]。
在使用括號時,請小心;在表內創建的鍵名必須視為字符串:tableName["keyName"]。但是,在引用像部分這樣的對象時,引號則不必要:tableName[keyName]。
許多腳本需要遍歷字典或數組,但你不一定知道這些數據結構的開始和結束。例如,玩家的字典可能會變化,或者玩家可能會有大小不一的數組庫存。
在這些情況下,你可以使用 pairs() 和 ipairs() 在 for 循環中遍歷每個元素,而不需要已知的開始和結束點。你也可以使用 in 關鍵字進行一般迭代,而不需要 pairs() 或 ipairs()。