如果我有一张颜色表:
colour["red"] = 1
colour["blue"] = 4
colour["purple"] = 5
Run Code Online (Sandbox Code Playgroud)
并且我想将红色添加到蓝色,我可以很容易地得到红色和蓝色的数值,但是然后使用值5,我可以让它返回"紫色"而不扫描整个表吗?
如果颜色编号是唯一的,您将需要一个包含散列和数组部分的表.例如:
colour["purple"] = 5
colour[5] = "purple"
Run Code Online (Sandbox Code Playgroud)
您可以创建一个有助于填充表的辅助函数,例如:
function addColour(coltab, str, val)
coltab[str] = val
coltab[val] = str
end
Run Code Online (Sandbox Code Playgroud)
@ WB的答案很好,如果你想要更神奇的东西,你可以使用__newindexmetamethod 来使用这种变化:
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
Run Code Online (Sandbox Code Playgroud)