阅读代码片段中注入的注释应该提供足够的上下文.
--| Table |--
QuestData = {
["QuestName"]={
["Quest Descrip"]={8,1686192712},
["Quest Descrip"]={32,1686193248},
["Quest Descrip"]={0,2965579272},
},
}
--| Code Snippet |--
--| gets QuestName then does below |--
if QuestName then
-- (K = QuestName) and (V = the 3 entries below it in the table)
for k,v in pairs(QuestData) do
-- Checks to make sure the external function that obtained the QuestName matches what is in the table before cont
if strlower(k) == strlower(QuestName) then
local index = 0
-- Iterates over the first two pairs - Quest Descrip key and values
for kk,vv in pairs(v) do
index = index + 1
end
-- Iterates over the second two pairs of values
if index == 1 then
for kk,vv in pairs(v) do
-- Sends the 10 digit hash number to the function
Quest:Function(vv[2])
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是Lua只会拿起其中一个号码而忽略其余的号码.无论重复如何,我都需要所有可能的哈希值.QuestData表("数据库")有超过10,000个条目.我不打算通过所有这些并删除重复项.此外,重复是存在的,因为可以在游戏中的多个位置拾取相同的任务.这不是一个重复的任务,但它有一个不同的哈希数.
钥匙总是独一无二的.关键的一点是,键指向唯一值,并且您不能使用更多具有相同名称的键来指向不同的值.根据Lua表的定义.
就像你想要两个具有相同名称和不同内容的变量一样.它没有任何意义 ...
表类型实现关联数组.[...]
与全局变量一样,如果未初始化表字段,则将其计算为nil.与全局变量一样,您可以将nil分配给表字段以将其删除.这不是巧合:Lua将全局变量存储在普通表中.
引用Lua表
根据评论,我更新答案,以了解散列.
您通常在像C这样的低级语言中使用散列.在Lua中,关联数组已经在某种程度上在后台进行了散列,因此它会过度(特别是使用SHA等).
您应该构建更多级别的表来处理冲突(Lua中没有"更好"的东西),而不是C中常用的链表.
如果你想让它花哨设置一些metatables,使它在某种程度上透明.但是从您的问题来看,您的数据看起来如何以及您真正想要的内容尚不清楚.
基本上你不需要更多:
QuestData = {
["QuestName"]={
["Quest Descrip"]={
{8,1686192712},
{32,1686193248},
{0,2965579272},
},
},
}
Run Code Online (Sandbox Code Playgroud)