我需要按特定顺序将元素添加到lua表中,并尝试将每个元素插入其最终位置(但以随机顺序(。我是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 处有两个元素的表格可能会附加(,但第 2 行和第 3 行让我完全困惑。在位置 1 处插入将追加,下一个插入将重新排序其他元素?!?
接下来的尝试是避免使用table.insert,而是使用test[5] = "5"等。 结果一模一样...
修复它的唯一方法是先用空字符串初始化元素 1 到 5,然后以随机顺序插入实际值。
有人知道为什么桌子会这样吗?
您的操作不会明智地应用于没有序列的表。第一条语句创建一个没有序列的表。然后一切都向南发展。
6.6 – 表操作
请记住,每当操作需要表的长度时,有关长度运算符的所有警告都适用(参见 §3.4.7(。
人们通常选择是否维护表的顺序。如果没有,请避免使用为序列设计的函数和 # 运算符(它是内置实现(。
您可以按照@lhf所述构建表格:
local test = {}
test[5] = "5"
test[1] = "1"
test[4] = "4"
test[3] = "3"
test[2] = "2"
然后在您确信已创建具有序列的表时,开始将表视为序列。