词典介绍

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

词典是表,将名称或 与值相关联,而不是索引。

例子:

Luau 词典语法

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["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

摘要

词典是使用键值对而不是索引值的表。词典和阵列以类似的方式开始,通过将弯曲括号分配给变量来分配。保持输入与逗号分开。

词典内的所有键应使用相同的数据输入,但值可以混合数据类型而无问题。

词典的访问方式可以传达其目的。敌人属性的词典可能使用 dot 运营符访问,而名单可能使用 tableName[keyName]

使用括号时,请注意;在表中创建的键名必须被视为字符串:tableName["keyName"]。然而,当引用零件等对象时,引用语句不需要:tableName[keyName]

许多脚本需要通过词典或阵列进行,但你可能不总知道这些数据结构的开始和结束。例如,玩家词典可能正在更改,或玩家可能有不同大小的阵列库存。

在这些情况下,您可以在 pairs()ipairs() 循环中使用 for 来通过每个元素而不需要知道开始和结束点。您还可以使用通用循环通过 in 键字循环通过元素而不需要 pairs()ipairs()