在错误的位置插入 - 为什么 lua table 会这样?

Inserts at wrong position - why does lua table behave this way?

我需要按特定顺序将元素添加到 lua table 并尝试将每个元素插入到其最终位置(但以随机顺序)。我是 lua 的新手并且之前没有使用过 table.insert(只读到 tables 支持关联和数组形式),但我很确定它不能'这样不行,所以我做了个小测试:

local test = {}
table.insert(test, 5, "5")
table.insert(test, 1, "1")
table.insert(test, 4, "4")
table.insert(test, 3, "3")
table.insert(test, 2, "2")

每次插入后的测试输出都传递了这个有趣的行为:

["5"]
["5","1"]
["1","4","5"]
["1","3","4","5"]
["1","2","3","4","5"]

实际上它的效果比预期的要好(我认为在位置 4 插入两个元素的 table 可能会追加),但是第 2 行和第 3 行让我非常困惑。在位置1插入追加,下一次插入重新排序其他元素?!?

接下来的尝试是避免使用 table.insert 而是使用 test[5] = "5" 等。 结果完全一样...

解决它的唯一方法是先用空字符串初始化元素 1 到 5,然后以随机顺序插入实际值。

有人知道为什么 table 会这样吗?

如果没有 sequence,您的操作不会明智地应用 table。第一个语句创建一个没有序列的 table。然后一切都向南。

6.6 – Table Manipulation

Remember that, whenever an operation needs the length of a table, all caveats about the length operator apply (see §3.4.7).

一般选择是否保持table的顺序。如果不是,请避免为序列设计的函数和 # 运算符(它是内置实现)。

您可以按照@lhf 的描述构建 table:

local test = {}
test[5] = "5"
test[1] = "1"
test[4] = "4"
test[3] = "3"
test[2] = "2"

然后当您确信您已经创建了一个带有序列的 table 时,开始这样处理 table。