介绍典典

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

字典是表,它们可以将名称或“*键**”与值相关,而不是索引。

示例:

Lua 字典语法

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. ServerScriptService 中,创建一个名为 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. 将名称插入 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() 是一个经常用于迭代通过 字典 的函数。 下面有一个例子。


local myDictionary = {
["Blue Player"] = "Ana",
["Gold Player"] = "Binh",
["Red Player"] = "Cate",
}
for key, value in pairs(myDictionary) do
print(key .. " is " .. value)
end

pairs() 可以用于与字典元素的键、值或两者进行工作。在下面的循环中,第一个变量是钥键。第二个变量是值。您想要使用的字典是通过 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 循环中通过每个元素 without known start 和 end 点。您还可以使用通过 1> in1> 关键字在循环中使用 general 循环通过 4> pairs()4> 或 <