没有用于搜索表格的内置函数。有很多方法可以解决它,它们的复杂性和效率各不相同。
local t = {
r={displayname="Red", name="Ruby", age=15, x=4, y=10},
y={displayname="Blue", name="Trey", age=22, x=3, y=2},
t={displayname="Red", name="Jack", age=20, x=2, y=3},
h={displayname="Red", name="Tim", age=25, x=2, y=33},
v={displayname="Blue", name="Bonny", age=10, x=2, y=0}
}
在Programming in Lua 中,他们建议构建一个反向表以进行高效查找。
revDisplayName = {}
for k,v in pairs(t) do
if revDisplayName[v.displayname] then
table.insert(revDisplayName[v.displayname], k)
else
revDisplayName[v] = {k}
end
end
然后您可以轻松匹配显示名称
for _, rowname in pairs(revDisplayName["Red"]) do
print(t[rowname].x, t[rowname].y)
end
如果您想构建复杂的查询,可以在 Lua、Lua 表、Beginning Lua Programming 中创建类似 SQL 的查询的代码。
如果您只想在几条记录中搜索匹配项,您可以使用 iterator in Lua 抽象搜索
function allmatching(tbl, kvs)
return function(t, key)
repeat
key, row = next(t, key)
if key == nil then
return
end
for k, v in pairs(kvs) do
if row[k] ~= v then
row = nil
break
end
end
until row ~= nil
return key, row
end, tbl, nil
end
你可以这样使用:
for k, row in allmatching(t, {displayname="Red", x=2}) do
print(k, row.name, row.x, row.y)
end
打印出来的
h Tim 2 33
t Jack 2 3