使用索引或值的Lua搜索表

时间:2013-05-27 15:52:05

标签: lua lua-table

所以如果我有一张颜色表:

colour["red"] = 1
colour["blue"] = 4
colour["purple"] = 5

我希望将红色添加到蓝色,我可以很容易地得到红色和蓝色的数字值,但是然后使用值5,我可以让它返回“紫色”而不扫描整个表吗?

2 个答案:

答案 0 :(得分:7)

如果颜色编号是唯一的,则需要一个包含散列和数组部分的表。例如:

colour["purple"] = 5
colour[5] = "purple"

您可以创建一个有助于填充表的辅助函数,例如:

function addColour(coltab, str, val)
    coltab[str] = val
    coltab[val] = str
end

答案 1 :(得分:5)

@ W.B.的答案很好,如果你想要更神奇的东西,你可以使用__newindex元方法来使用这种变化:

local colour = setmetatable({}, {
  __newindex = function(self,k,v)
    rawset(self,k,v)
    rawset(self,v,k)
  end
})

colour["red"] = 1
colour["blue"] = 4
colour["purple"] = 5

print(colour["purple"]) -- 5
print(colour[4]) -- blue