【问题标题】:Bidirectional Map in LuaLua中的双向映射
【发布时间】:2017-03-01 05:23:23
【问题描述】:

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

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

【问题讨论】:

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

标签: lua


【解决方案1】:

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

【讨论】:

  • 当将两个方向放入同一个表中时,最好在添加/删除键/值对时立即更新反向对。如果你不这样做,然后用pairs 迭代以添加逆,事情就会中断。 (您正在向表中添加条目,这可能会触发调整大小,这可能会改变底层存储中条目的顺序 - 所以next/pairs 将执行“醉汉漫步”,跳过元素或遍历它们多次. 如果您忘记了这一点,您可能会遇到一些难以发现的丑陋错误。)
猜你喜欢
  • 2010-11-14
  • 2010-11-07
  • 1970-01-01
  • 2016-04-19
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多