字典是將名稱或 鍵 與值關聯的表,而不是索引。
範例:
local pet = {
Name = "Bobbie",
Type = "Dog",
}當你需要標記值,而不僅僅是像數組那樣按順序列出它們時,請使用字典。在本教程中通過操作與玩家相關的值來練習使用字典。
字典語法
與數組類似,字典使用大括號 {} 來分配給變量。鍵值對 以逗號分隔的單獨行存儲。鍵和值可以是任何數據類型,包括字符串、數字和變量名稱。
local playerNames = {
player1 = "Zap",
player2 = "Kel",
}
print(playerNames["player1"])要將部分或其他實例對象作為鍵引用,請使用方括號。
local greenPart = workspace.GreenPart
local redPart = workspace.RedPart
local 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) do
print(key .. " 是 " .. value)
endpairs() 可以用來處理字典元素的鍵、值或兩者。在下面的 for 循環中,第一個變量是鍵。第二個變量是值。要處理的字典傳遞給 pairs()。
local inventory = {
["金磚"] = 43,
胡蘿蔔 = 3,
火把 = 2,
}
print("你擁有:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
end執行時,代碼將打印以下內容:
你擁有:
43 金磚
3 胡蘿蔔
2 火把總結
字典是使用鍵值對而不是索引值的表。字典和數組的開始類似,都是將大括號分配給變量。保持條目用逗號分隔。
字典中的所有鍵應使用相同的數據類型,但值可以混合數據類型而不會有問題。
訪問字典的方式可以傳達其目的。敵人屬性的字典可能會使用點運算符訪問,而名稱列表則可能使用 tableName[keyName]。
使用方括號時要小心;在表中創建的鍵名必須作為字符串處理:tableName["keyName"]。但是,當引用像部件這樣的對象時,不需要引號:tableName[keyName]。
許多腳本需要遍歷字典或數組,但你可能不總是知道這些數據結構的開始和結束。例如,玩家的字典可能在變化,或者玩家可能有大小不一的數組庫存。
在這些情況下,你可以使用 pairs() 和 ipairs() 在 for 循環中遍歷每個元素,而無需知道開始和結束點。你也可以使用 in 關鍵字進行一般迭代,無需使用 pairs() 或 ipairs()。