lua - 如何在 Lua 中使用本身就是表的唯一键来实现映射?

标签 lua lua-table

大多数语言都提供了一些方法,可以使用等价关系和哈希函数(使用哈希表)或使用顺序关系(使用树)为任何类型的键有效地实现映射。

然而,Lua 表似乎只为字符串提供此功能。具体来说,如果使用 Lua 表(概念上实现“对象”)作为键,则只能通过对同一对象的引用再次查找,而不是具有相同“内容”的新对象。

这是实现类似于数据库索引或基于“唯一”键的某些值的缓存的行为所必需的,至少不求助于线性时间查找。

我唯一能想到的是,如果键对象是由字段 f1,...,fn 组成的,我们可以制作一堆嵌套映射并像这样查找 T[f1][f2]...[fn](至少如果字段本身是整数或字符串)。这有点糟糕,破坏​​了将 f1,...,fn 封装到“对象”中的意图。

还有其他想法吗?

最佳答案

看起来你想要的可能是this之类的东西.

否则,一种有效的方法是以确定性方式将您的 key 序列化为字符串,并将结果(或其哈希)用作 key 。

就像 SolarBear 在评论中告诉您的那样,您可以使用方法使其具有与常规表相同的界面。

关于lua - 如何在 Lua 中使用本身就是表的唯一键来实现映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18379844/

相关文章:

lua - 为什么在 "then"可以重用时 "do"关键字存在于 Lua 中?

c++ - Luabridge 中出现 "addProperty"错误

c++ - LuaPlus:如何将表格插入堆栈?

string - 从字符串变量调用非全局函数

lua - 在 Lua 中创建表的调试钩子(Hook)

lua - 读/写二进制文件

lua - table.insert/remove按值

lua - string.match 抛出错误 : attempt to index field '?' (a string value)

Lua os.execute 返回值

sorting - Lua 按字母顺序对表进行排序,数字除外