字典介紹

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

辭典是表,將名稱或 鑰匙 與值相關聯,而不是與索引。

例子:

Luau 辭典語法

local pet = {
Name = "Bobbie",
Type = "Dog",
}

當您需要標籤值時,請使用辭典,而不是只將它們按順序列出,像 array 一樣。在這個教學中練習使用辭典,操縱與玩家相關的值來操作。

辭典語法

像陣列一樣,辭典被分配給變量,使用捲髮括號 {}鑰匙值對雙方 被儲存在分開的線上,隨後跟隨逗號。鍵和值可以是任何數據類型,包括字串、數字和變量名稱。


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["keyName"] 。對於用於描述對象的辭典,程式員更可能使用 tableName.keyName

更改辭典值

變更鑰匙值與任何其他變量相同;使用等值 = 運算符。

  1. enemy 桌子下,將敵人的名稱設為其他東西


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

已存在的變量作為鑰匙

辭典可以與其他部分的腳本中已宣言的預存變量互動。下面的編碼範例使用變量將玩家的名稱作為鑰匙加入體驗,然後將他們的點值設為 0。

  1. 伺服器腳本服務 中,創建一個名為 PlayerPoints 的新腳本在腳本中,獲取玩家服務並創建一個名為 playerPoints 的空字典。


    local Players = game:GetService("Players")
    local playerPoints = {
    }
  2. 為新玩家變量設置玩家點的本地函數編寫代碼,並將函數連接到 Players.PlayerAdded 事件。


    local playerPoints = {
    }
    local function setPoints(newPlayer)
    end
    Players.PlayerAdded:Connect(setPoints)
  3. 在函數中,添加變量以獲得玩家的 Name ,每個 玩家 對象的屬性,以及用於測試的打印聲明


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    end
  4. name 插入到 playerPoints 字典中作為鑰匙,並將值設為玩家的點數 0。


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    playerPoints[name] = 0
    end
  5. 使用 name 列印玩家的名稱,並使用 playerPoints[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()

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

簡介

辭典是使用鑰匙值對值而不是索引值的表。辭典和陣列以相同方式開始,即指派捲髮括號給變量。以逗號將輸入分開。

辭典內的所有鍵應使用相同的數據類型,但值可以混合數據類型而無問題。

字典的存取方式可以傳達其目的。敵方屬性辭典可能使用點號運算符來存取,而名單可能使用 tableName[keyName]

當使用括號時,請小心;表內創建的鍵名必須被視為字串:tableName["keyName"]。但當參考零件等物件時,引用符不需要:tableName[keyName]

許多腳本需要通過辭典或陣列進行,但你可能不總能知道這些數據結構的開始和結束。例如,玩家辭典可能正在更新,或玩家可能擁有不同尺寸的數組庫存。

在這些情況下,您可以使用 pairs()ipairs()for 循環中穿過每個元素,而不需要知道起點和結點。您也可以使用通用循環通過 in 關鍵字來循環通過元素,而無需使用 pairs()ipairs()