字典简介

*此内容使用人工智能(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("反派 " .. enemy["Name"] .. " 逼近!")
print("反派 " .. enemy.Name .. " 逼近!")

使用哪种风格通常取决于表的目的。对于像服务器中玩家列表这样的值集合,程序员通常会使用 tableName["keyName"]。对于用于描述对象的字典,程序员更可能使用 tableName.keyName

更改字典值

更改键的值与任何其他变量相同;使用等号 = 操作符。

  1. enemy 表下,将敌人的名字设置为其他名称。

    local enemy = {
    Name = "Spike",
    Health = 1000,
    }
    enemy.Name = "Rana"
    print("敌人的名字是 " .. enemy.Name)
  2. 进行游戏测试并检查输出窗口。

预先存在的变量作为键

字典可以与在脚本其他部分声明的预先存在的变量进行交互。以下代码示例使用一个变量在玩家加入游戏时将其名字作为键添加,然后将他们的积分值设置为 0。

  1. ServerScriptService 中,创建一个名为 PlayerPoints 的新脚本。在脚本中,获取 Players 服务并创建一个空字典,名为 playerPoints

    local Players = game:GetService("Players")
    local playerPoints = {
    }
  2. 编写一个本地函数,用于设置玩家积分,参数为新玩家变量。将该函数连接到 Players.PlayerAdded 事件。

    local playerPoints = {
    }
    local function setPoints(newPlayer)
    end
    Players.PlayerAdded:Connect(setPoints)
  3. 在函数中,添加一个变量以获取玩家的 Name,这是每个 Player 对象中的一个属性,并添加一个打印语句进行测试。

    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("你好 " .. name)
    end
  4. name 插入 playerPoints 字典作为键,并将值(玩家的积分)设置为 0。

    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("你好 " .. name)
    playerPoints[name] = 0
    end
  5. 使用 name 打印玩家的名字,并使用 playerPoints[name] 打印与变量匹配的键的值。

    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("你好 " .. name)
    playerPoints[name] = 0
    print(name .. " 有 " .. playerPoints[name] .. " 积分。")
    end
  6. 运行项目并观察输出。

完成的脚本
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("你好 " .. name)
playerPoints[name] = 0
print(name .. " 有 " .. playerPoints[name] .. " 积分。")
end
Players.PlayerAdded:Connect(setPoints)

可选挑战

以下是一些适用于以不同方式使用字典的挑战。看看你能否为这些构建代码。

  • 创建一个陷阱部件,对玩家造成持续伤害。一旦玩家触碰到陷阱,就对他们造成伤害,等待,然后允许他们再次受到伤害。
  • 创建一个函数,通过访问字典检查两个玩家中谁的积分更多。
  • 创建一个密码系统,将一个字符串替换为另一个字符串以创建“秘密”代码。例如,字母“A”可以替换为“G”,或者单词“apple”可以替换为“orange”。

字典和 pairs()

pairs() 是一个常用于遍历 字典 的函数。下面是一个示例。

local myDictionary = {
["蓝色玩家"] = "Ana",
["金色玩家"] = "Binh",
["红色玩家"] = "Cate",
}
for key, value in pairs(myDictionary) do
print(key .. " 是 " .. value)
end

pairs() 可以用于处理字典元素的键、值或两者。在下面的 for 循环中,第一个变量是键。第二个变量是值。要处理的字典传递给 pairs()

local inventory = {
["金砖"] = 43,
胡萝卜 = 3,
火把 = 2,
}
print("你拥有:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
end

执行时,代码将打印以下内容:

你拥有:
43 金砖
3 胡萝卜
2 火把

总结

字典是使用键值对而不是索引值的表。字典和数组的开始方式相似,都是将大括号赋值给变量。保持条目用逗号分隔。

字典中的所有键应使用相同的数据类型,但值可以混合数据类型而没有问题。

访问字典的方式可以传达其目的。敌人属性的字典可能会使用点操作符访问,而名字列表可能会使用 tableName[keyName]

使用方括号时要小心;在表中创建的键名必须作为字符串处理:tableName["keyName"]。然而,当引用像部件这样的对象时,不需要引号:tableName[keyName]

许多脚本需要遍历字典或数组,但你可能并不总是知道这些数据结构的开始和结束。例如,玩家的字典可能在变化,或者玩家可能有一个大小不一的数组库存。

在这些情况下,你可以在 for 循环中使用 pairs()ipairs() 来遍历每个元素,而无需知道开始和结束点。你也可以使用 in 关键字进行一般迭代,以循环遍历元素,而无需使用 pairs()ipairs()

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。