在错误的位置插入 - 为什么 lua 表现出这种行为?

我需要按照特定的顺序向 lua table 添加元素,并尝试将每个元素插入到其最终位置(但顺序是随机的)。我刚接触 lua,之前没有使用过 table.insert(只是读过表格支持关联和数组形式),但我很确定它不可能以这种方式工作,所以我写了一个小测试:

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,然后以随机顺序插入实际值。

有人有想法为什么表格表现出这样的行为吗?

点赞
用户2226988
用户2226988

你的操作在没有顺序的表上不适用。第一句创建了一个没有顺序的表。然后一切都不顺利了。

6.6 – 表操作

请记住,每当操作需要表的长度时,所有有关长度运算符的注意事项都适用(见§3.4.7)。

通常需要考虑是否要保持表的顺序。如果不需要,请避免针对顺序设计的函数和#运算符(内置实现)。

您可以像@lhf所描述的那样构建表:

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

然后,在您确信已创建了一个具有序列的表时,开始将表视为具有序列。

2019-08-24 21:13:11