字典是表,它们可以将名称或“*键**”与值相关,而不是索引。
示例:
Lua 字典语法
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 时。
在 ServerScriptService 中,创建一个名为 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将名称插入 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() 是一个经常用于迭代通过 字典 的函数。 下面有一个例子。
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() 可以用于与字典元素的键、值或两者进行工作。在下面的循环中,第一个变量是钥键。第二个变量是值。您想要使用的字典是通过 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 循环中通过每个元素 without known start 和 end 点。您还可以使用通过 1> in1> 关键字在循环中使用 general 循环通过 4> pairs()4> 或 <