词典是表,将名称或 键 与值相关联,而不是索引。
例子:
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("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
使用哪种风格通常取决于表的目的。对于包含服务器中玩家列表等值集的表,编程师通常会使用 tableName["keyName"] 。对于用于描述对象的词典,编程师更可能使用 tableName.keyName 。
更改词典值
更改钥键的值与任何其他变量相同;使用等值 = 运营符。
在 enemy 表下,将敌人的名称设置为其他东西。
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)测试并检查输出窗口。
存在的变量作为键
词典可以与其他部分的脚本中声明的预存变量进行交互。以下编程示例使用变量将玩家的名称添加为键,当他们加入体验时,然后将他们的点值设置为 0。
在 服务器脚本服务 中,创建一个名为 PlayerPoints 的新脚本。在脚本中,获取玩家服务并创建一个名为 playerPoints 的空词典。
local Players = game:GetService("Players")local playerPoints = {}为新玩家变量设置玩家点的本地函数编写代码,并将函数连接到 Players.PlayerAdded 事件。
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)在函数中,添加变量以获取玩家的 Name ,每个 玩家 对象的属性,以及用于测试的打印声明。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)end将 name 插入到 playerPoints 词典中作为键,并将值设置为玩家的积分为 0。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0end使用 name 打印玩家的名称,使用 playerPoints[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()
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 来通过每个元素而不需要知道开始和结束点。您还可以使用通用循环通过 in 键字循环通过元素而不需要 pairs() 或 ipairs() 。