2017-02-28 31 views
2

你会如何在Lua中制作双向地图?我是Lua的新手,我能想到的唯一方法是将每个键 - 值对放在一个表中,遍历每对,将它们(键值交换)添加到原始表中。Lua中的双向地图

有没有更好的方法来做到这一点?

+0

为什么你需要这样做?还有其他方法,例如,您可以将两个表(左侧和右侧)封装在具有metatable的表中,并提供确保两者一致性的方法。或者如果你不需要在右边快速查找,则可以使用一个表格 –

回答

3

我不认为有更好的方法(假设你可以处理键/值冲突)。在向表中添加新值(或更新/删除现有值)时,稍微好一点的方法可能是存储交换的值,但总体思路是相同的。

+3

当将两个方向放入同一个表格时,最好在添加/移除键/值对时立即更新反转的对。如果你不这样做,然后用'pairs'迭代来添加反函数,那么事情就会中断。 (你正在向表中添加条目,这可能会触发一个调整大小,这可能会改变底层存储条目的顺序 - 所以'next' /'pairs'会做一个“醉汉漫步”,跳过元素或遍历它们几次如果你忘记了这些,你可以得到一些丑陋的难以发现的错误。) – nobody