如何搜索 Lua 表值

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 函数可以让我以这种方式搜索?

Pau*_*nko 2

最简单的方法是迭代所有元素并找到符合您条件的元素:

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)

如果表中的元素更改了它们的值,则您需要在更新或删除值时使缓存失效。