Lua 如何通过 table 值检索 table 行?
Lua how do you retrieve a table row by a table value?
示例:
mytable = {{id=100,wordform="One Hundread"},{id=200,wordform="Two Hundread"}}
我希望能够访问基于 id 的行来做这样的事情:
mynum = 100
print ("The value is " .. mytable[mynum].wordform)
这里的要点是我希望能够设置索引值,这样我以后就可以像使用 java 哈希图一样检索相关值。
你可以使用metatable
setmetatable(mytable, {__index = function(tbl, id)
for _, item in pairs(tbl) do
if type(item) == "table" and item.id == id then
return item
end
end
end})
然后
mynum = 100
print ("The value is " .. mytable[mynum].wordform) -- The value is One Hundread
理想情况下,您的 table 应该只使用 ID 作为键:
local mytable = {[100] = {wordform = "One hundred"}, [200] = {wordform = "Two hundred"}}
print("The value is " .. mytable[100].wordform)
如果您的 table 是列表形式,您可以很容易地将其转换为 ID 形式:
local mytable_by_id = {}
for _, item in pairs(mytable) do mytable_by_id[item.id] = item end
使用 Lua table 的散列部分绝对比在线性时间内循环列表条目更可取,正如 Renshaw 的回答所暗示的那样(事实上它隐藏在 meta[=23= 后面) ] 可能会隐藏糟糕的性能并欺骗 reader 相信哈希索引操作正在此处进行)。
此外,该答案甚至无法正常工作,因为列表部分也使用整数键;作为有效列表部分索引的 ID 可能 return 是错误的元素。您必须使用函数而不是 metatable.
示例:
mytable = {{id=100,wordform="One Hundread"},{id=200,wordform="Two Hundread"}}
我希望能够访问基于 id 的行来做这样的事情:
mynum = 100
print ("The value is " .. mytable[mynum].wordform)
这里的要点是我希望能够设置索引值,这样我以后就可以像使用 java 哈希图一样检索相关值。
你可以使用metatable
setmetatable(mytable, {__index = function(tbl, id)
for _, item in pairs(tbl) do
if type(item) == "table" and item.id == id then
return item
end
end
end})
然后
mynum = 100
print ("The value is " .. mytable[mynum].wordform) -- The value is One Hundread
理想情况下,您的 table 应该只使用 ID 作为键:
local mytable = {[100] = {wordform = "One hundred"}, [200] = {wordform = "Two hundred"}}
print("The value is " .. mytable[100].wordform)
如果您的 table 是列表形式,您可以很容易地将其转换为 ID 形式:
local mytable_by_id = {}
for _, item in pairs(mytable) do mytable_by_id[item.id] = item end
使用 Lua table 的散列部分绝对比在线性时间内循环列表条目更可取,正如 Renshaw 的回答所暗示的那样(事实上它隐藏在 meta[=23= 后面) ] 可能会隐藏糟糕的性能并欺骗 reader 相信哈希索引操作正在此处进行)。
此外,该答案甚至无法正常工作,因为列表部分也使用整数键;作为有效列表部分索引的 ID 可能 return 是错误的元素。您必须使用函数而不是 metatable.