Sis*_*isk 6 search lua lua-table
我有一个项目,该项目在无法使用实际数据库的环境中需要类似结构的关系数据库。语言仅限于 Lua,这远不是我最强的语言。我有一个表格结构如下:
table={
m:r={
x=1
y=1
displayName="Red"
}
m:y={
x=1
y=2
displayName="Yellow"
}
}
Run Code Online (Sandbox Code Playgroud)
构建、存储和检索表非常简单。我遇到问题的地方是搜索它。为了清楚起见,如果我可以使用 SQL,我会这样做:
SELECT * FROM table WHERE displayName="Red"
Run Code Online (Sandbox Code Playgroud)
是否有 Lua 函数可以让我以这种方式搜索?
最简单的方法是迭代所有元素并找到符合您条件的元素:
local t={
r={
x=1,
y=1,
displayName="Red",
},
y={
x=1,
y=2,
displayName="Yellow",
},
}
for key, value in pairs(t) do
if value.displayName == 'Red' then
print(key)
end
end
Run Code Online (Sandbox Code Playgroud)
这应该打印“r”。
在大表上这可能会相当慢。为了加快此过程,您可以跟踪散列中的引用,这将提供更快的访问速度。像这样的事情可能会起作用:
local cache = {}
local function findValue(key)
if cache[key] == nil then
local value
-- do a linear search iterating through table elements searching for 'key'
-- store the result if found
cache[key] = value
end
return cache[key]
end
Run Code Online (Sandbox Code Playgroud)
如果表中的元素更改了它们的值,则您需要在更新或删除值时使缓存失效。