插入位置错误-为什么lua表会有这种行为?

插入位置错误-为什么lua表会有这种行为?,lua,lua-table,Lua,Lua Table,我需要以一定的顺序向lua表中添加元素,并尝试将每个元素插入到其最终位置(但顺序是随机的)。我是lua新手,以前没有使用过table.insert(只知道tables同时支持关联和数组形式),但我非常确定它不能以这种方式工作,所以我做了一个小测试: localtest={} 表.插入(测试,5,“5”) 表.插入(测试,1,“1”) 表.插入(测试,4,“4”) 表.插入(测试,3,“3”) 表.插入(测试,2,“2”) 每次插入后的测试输出提供了以下有趣的行为: [“5”] ["5","1"

我需要以一定的顺序向lua表中添加元素,并尝试将每个元素插入到其最终位置(但顺序是随机的)。我是lua新手,以前没有使用过table.insert(只知道tables同时支持关联和数组形式),但我非常确定它不能以这种方式工作,所以我做了一个小测试:

localtest={}
表.插入(测试,5,“5”)
表.插入(测试,1,“1”)
表.插入(测试,4,“4”)
表.插入(测试,3,“3”)
表.插入(测试,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,然后按随机顺序插入实际值


有人知道为什么表会有这种行为吗?

您的操作不会明智地应用于没有。第一条语句创建一个没有序列的表。然后一切都向南发展

请记住,每当一个操作需要表的长度时,有关长度运算符的所有警告都适用(请参阅)

人们通常会选择是否维护表的顺序。如果不是,请避免为序列设计的函数和#运算符(它是内置实现)

您可以按照@lhf描述的方式构建表:

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

然后,当你确信你已经创建了一个带有序列的表时,就开始这样对待这个表。

我在第2行得到了
错误的参数2到'insert'(位置超出边界)
。哦,这很有趣。也许是不同的lua版本?看起来我使用的是Lua 5.1。是的,该消息是Lua 5.2+Lua 5.2+所输出的。无论如何,
test[5]=“5”
是最简单和最好的方法。我在Lua 5.1上的5个输出是最简单和最好的方法。我在Lua 5.1上的5个输出是:我在Lua 5.1上的5.1看起来看起来我使用的Lua 5.1看起来是我使用Lua 5.1.1。是我在Lua 5.1。是我的5.1。我在Lua 5.1。我在Lua 5.1上的5.1的5.1上的5.1的5.1上的5的5.1的5的5的5个输出是最简单和最好的5。我的5.1。我在Lua 5.1。我在Lua 5.1上的5.1上的5.1上的5.1上的5的5的5的“}谢谢你,汤姆!关于表格边框的那一段终于消除了我的困惑。