介紹辭典

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

典典是擁有索引的表,而不是索引。

範例:

Lua 字典語法

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])

建立字典

使用字典的一個每日使用例子是組織玩家或角色資訊。這些步驟探索理論上的敵人角色資訊如何存取和存儲。

  1. 在新的指令碼中,創建名為 enemy 的字典。


    local enemy = {
    }
  2. 典禮中的第一個鑰匙會記錄敵人的名字,並使用變數 Name


    local enemy = {
    Name
    }
  3. 將敵人名稱分配到鑰鍵,並在此後加上一個空格。


    local enemy = {
    Name = "Spike",
    }
  4. 為敵人的生命值增加第二個鑰匙值組。記住,鑰匙應該總是使用相同的資料輸入,但值不是。


    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。

變更字典值

變更鍵的值與任何其他變數相同;使用等等 = 操作器。

  1. enemy 桌子底下,將敵人的名稱變更為其他名稱。


    local enemy = {
    Name = "Spike",
    Health = 1000,
    }
    enemy.Name = "Rana"
    print("The enemy's name is " .. enemy.Name)
  2. 測試輸出窗口,並檢查輸出窗口。

以前存在的變量作為鑰匙

典禮可以與指定於其他部分的指令碼互動。下列程式碼範例使用變數來添加玩家的名稱作為鑰匙,當玩家加入體驗後,設定他們的點值為 0 並將其重設為 0。

  1. ServerScriptService 中,創建名為 PlayerPoints 的新指令。在指指令碼中,取得玩家服務,並且創建名為 playerPoints 的空白典藏。


    local Players = game:GetService("Players")
    local playerPoints = {
    }
  2. 為新玩家變量設定玩家點數的本地函數。連接函數到 Players.PlayerAdded 事件。


    local playerPoints = {
    }
    local function setPoints(newPlayer)
    end
    Players.PlayerAdded:Connect(setPoints)
  3. 在 function 中,add 一個變數來取得玩家的 Name ,每個 玩家 對物件的屬性,以及測試的打印語句。


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    end
  4. 將名稱插入 playerPoints 字典作為鍵,並將值設為玩家的點數,然後將其設置為 0。


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    playerPoints[name] = 0
    end
  5. 使用 name 列印玩家和玩家點數[name]的玩家名稱,列印與變量匹配的鑰匙值。


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    playerPoints[name] = 0
    print(name .. " has " .. playerPoints[name] .. " points.")
    end
  6. 執行項目並查看輸出編輯器。

已完成的指令碼

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) do
print(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) do
print(itemValue, itemName)
end

執行時,代碼會列出以追蹤中內容:


You have:
43 Gold Bricks
3 Carrots
2 Torches

摘要

典型將鍵值對作為索引值而不是列表值使用。典型和陣列的順序與索引值相同,請將入口分開使用分號。

典型中的所有鑰匙都應該使用相同的資料輸入,但值可以混合資料類型,沒有問題。

典型的方式來存取字典可以傳達字典的目的。敵人屬性的字典可能會使用 dot 運算器,而名稱列表可能會使用 tableName[keyName]。

使用括號時,請小心;表中創建的鑰匙名稱必須作為字串來處理:tableName["keyName"]。但是,當參考零件等對象時,引用括號不是必要的:tableName[keyName]

許多指令碼需要穿過字典或陣列,但您可能不會總是知道這些資料結構的開始和結束。例如,玩家的字典可能會變更,或玩家可能有一個陣列的多種尺寸。

在這些情況下,您可以使用 pairs()ipairs()for 循環中通過每個元素,不需要開始和結束點。您也可以使用通用 1> in1> 字元來循環通過元素,而不需要開始和結束點。