【问题标题】:When defining keys in table, why is it inserted in a random order?在表中定义键时,为什么按随机顺序插入?
【发布时间】:2019-07-04 07:04:18
【问题描述】:

在处理 Love2d 项目时,我注意到在使用键定义表并将所述表放入另一个表中时,在循环中,这些表是以随机顺序插入的。

为了测试这一点,我制作了一个简短的脚本,希望能更好地解释我的困境。我的第一个假设是因为密钥被插入到我有可用内存的地方,尽管我不确定。没遇到过这种情况,大家有什么意见吗?

【问题讨论】:

  • pairs 使用表键的哈希顺序。

标签: random lua key lua-table


【解决方案1】:

Lua 将表实现为哈希表,因此在遍历它们时具有明显的随机顺序。这是设计使然,可以在摊销的常数时间内完成对表的访问。

如果顺序对您很重要,请使用顺序索引和复杂值,像这样

t[1] = { key="CA", value="California" }
t[2] = { key="TX", value="Texas" }

【讨论】:

  • 这对我来说很有意义。非常感谢您解决这个问题。
  • 好答案;我要补充一点,您还可以使用整数键来存储字符串键列表,然后指向您的实际值:{'first', 'second', 'third', first='foo', second='bar', third="I'm last ;)"}(因此总共只使用一个表,这样可以节省分配并且在 GC 上更容易)你甚至可以过度杀伤并将密钥保存在元表中;只使用了一张桌子,但在技术上“更干净”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 2015-01-26
  • 2018-11-20
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
相关资源
最近更新 更多