如何创建带有唯一 ID 的表条目,并使用该 ID 访问它们?

嗨,我需要在 Lua 中创建一个表,每个条目(记录)都可以用唯一的 ID 表示

table[p1d2].seq={0,1,2,3} table[p1d2].days={'sun','mon','wed'}
table[p2d2].seq={0,1,2,3,4} table[p2d2].days={'fri','sat','tue'}

print(table.concat(table[p1d2].seq))==> 0123

我想要这样插入和访问,请帮助我解决这个谜题

点赞
用户14951170
用户14951170

我不确定你的具体意思,因为在 Lua 中原生支持字符串索引的表格,例如下面的片段:

tab = {};
tab['one']=1;
print(tab['one']);

会打印出 1... 如果这不是你想要的,你能否更明确地解释一下你想要的行为呢?

如果你的问题就是这个,像下面这段代码应该就可以解决(我定义了一个 Thing 类,因为我看到你似乎使用一个带有 seqdays 字段的类,但我猜你的代码中已经有了这样的东西,所以我只是将它作为信息目的留下了这个类定义)。

-- 类定义
Thing = {seq = {}, days ={}}

function Thing:new (o)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  return o
end

-- 表和 ID 的定义

tab={}
p1d2='p1d2'
p2d2='p2d2'

-- 这对应于你在问题中给出的代码

tab[p1d2]=Thing:new()
tab[p2d2]=Thing:new()
tab[p1d2].seq={0,1,2,3}
tab[p1d2].days={'sun','mon','wed'}
tab[p2d2].seq={0,1,2,3,4}
tab[p2d2].days={'fri','sat','tue'}

print(table.concat(tab[p1d2].seq))
-- 输出 '0123'
2021-01-06 13:12:33
用户2858170
用户2858170

如果您想要创建具有唯一 id 的表条目,为什么不简单地使用数字表键呢?

local list = {}

table.insert(list, {seq={0,1,2,3}, days={"sun", "mon", "wed"}})
table.insert(list, {seq={0,1,2,3,4}, days= {'fri','sat','tue'}})

这样添加的每个条目都将自动拥有唯一的 id ,而无需生成一个。然后,您可以使用该索引稍后访问该条目。

如果这不是您所要求的,您应该提供更多详细信息和示例。

2021-01-06 15:46:34