如何在Lua中实现一个带有唯一关键字的映射,这些关键字本身就是表?

大多数编程语言都提供一些方式,以高效的方式实现任何类型键的映射,这可以通过使用等价关系和哈希函数(使用哈希表)或使用排序关系(使用树)来实现。

然而, Lua 表似乎只能针对字符串实现此功能。具体而言,如果使用 Lua 表(在概念上实现“对象”)作为键,则只能通过对相同对象的引用进行查找,而不能通过具有相同“内容”的新对象进行查找。

为了实现类似于数据库索引或基于“唯一”键的缓存的行为,至少不需要使用线性时间查找,这似乎是必需的。

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

还有其他想法吗?

点赞
用户204011
用户204011

看起来你想要的可能是这个:这个链接

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

像 SolarBear 在评论中告诉你的那样,你可以使用元方法使它具有与常规表相同的接口。

2013-08-22 12:27:02
用户1358661
用户1358661

你可以用表格来索引表格,这样就可以使用它们作为参考。

local cache = {}
local t = {}
cache[t] = 345 -- 键名无关紧要,但不能等于 nil
local other = {
  ref = t
}

...
print(cache[other.ref]
2014-07-01 19:47:06