3

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

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

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

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

还有其他想法吗?

4

2 回答 2

3

看起来你想要的可能是这样的。

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

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

于 2013-08-22T12:27:02.163 回答
0

您可以用表索引表,从而允许将它们用作参考。

local cache = {}
local t = {}
cache[t] = 345 -- key is not important, but must not equal nil
local other = {
  ref = t
}

...
print(cache[other.ref]
于 2014-07-01T19:47:06.877 回答