Lua 5.0 - 迭代表时忽略重复键,即使值不同
2016-3-30 21:11:10
收藏:0
阅读:93
评论:3
阅读代码片段中的注入注释应该足够了解上下文。
--| 表 |--
QuestData = {
["任务名称"]={
["任务描述"]={8,1686192712},
["任务描述"]={32,1686193248},
["任务描述"]={0,2965579272},
},
}
--| 代码片段 |--
--| 获取任务名称然后执行以下内容 |--
if QuestName then
-- (K = 任务名称) 及 (V = 表中它以下的 3 个条目)
for k,v in pairs(QuestData) do
-- 在继续之前检查确保获得任务名称的外部函数与表中的匹配
if strlower(k) == strlower(QuestName) then
local index = 0
-- 迭代前两对 - 任务描述键和值
for kk,vv in pairs(v) do
index = index + 1
end
-- 迭代第二个两个值
if index == 1 then
for kk,vv in pairs(v) do
-- 将这个十位数哈希数发送到函数
Quest:Function(vv[2])
end
end
end
end
end
我遇到的问题是 Lua 只会获取一个数字并忽略其余的数字。我需要所有可能的哈希数字,而不管重复。QuestData 表(“数据库”)有超过 10,000 条目。我不会去检查并删除其中的重复项。此外,这些重复项是因为在游戏中可以在多个位置上拾取同一个任务。这不是重复任务,但它有不同的哈希数。
点赞
用户2858170
正如 Jakuje 已经提到的,表的键必须是唯一的。 但是你也可以把它们存储为表的成员,比如:
QuestData = {
-- “QuestName”必须是唯一的!当然你也可以把它放到一个表成员里
["QuestName"]={
{hash = “任务描述”, values = {8,1686192712} },
{hash = “任务描述”, values = {32,1686193248} },
{hash = “任务描述”, values = {0,2965579272} }
}
}
我相信你可以用更好的方法来组织它。对我来说,这似乎是一个相当令人困惑的概念。
2016-03-30 08:20:42
用户1737
你曾表示你不能"重写数据库",但问题在于QuestData表并不包含你认为它包含的内容。
下面是你的表格:
QuestData = {
["QuestName"]={
["Quest Descrip"]={8,1686192712},
["Quest Descrip"]={32,1686193248},
["Quest Descrip"]={0,2965579272},
},
}
但实际上就像是这样写...
QuestData["Quest Descrip"] = {8,1686192712}
QuestData["Quest Descrip"] = {32,1686193248}
QuestData["Quest Descrip"] = {0,2965579272}
所以第二个(然后是第三个)值覆盖了第一个。问题不在于你无法访问这个表格,而是这个表格不再包含这些值。
你需要找到另一种表示数据的方法。
2016-03-30 21:27:51
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
Key始终是唯一的。这是键的要点,即键指向唯一的值,你不能有相同名称的不同键来指向不同的值。这是Lua表的定义。
就像你想要有两个具有相同名称但具有不同内容的变量一样是没有意义的...
引用自Lua Tables
在Lua中的哈希
根据评论,我更新了答案,以提供关于哈希的一些想法。
在诸如C之类的低级语言中,通常使用哈希。在Lua中,关联数组在背景中已经以某种方式被哈希,因此这将是过度(尤其是使用SHA或类似的东西)。
与C通常使用的链接列表不同,您应该构建更多级别的表来处理冲突(在Lua中没有“更好”的方法)。
如果你想要将其设置得复杂一些,请设置一些元表,使其在某种程度上变得透明。但从您的问题中,真的不清楚您的数据长什么样,您真正想要什么。
基本上,你不需要更多的东西:
QuestData = { ["QuestName"]={ ["Quest Descrip"]={ {8,1686192712}, {32,1686193248}, {0,2965579272}, }, }, }