lua循环中的for-i方式跳过,此处只讲for-i,v方式,也就是pairs/ipairs方式。
例子,我需要利用for-pairs(table)循环遍历table中的元素,在遍历过程中,每次处理完一个元素后,我会按需决定是否删除掉table中这个元素。那么问题来了,删除元素之后是否改变table的结构,for循环是否能继续进行下去?下面进行测试。
ipairs测试代码:
测试结果:
结果表明,
1、在循环的每一次 i,v 中,程序会保持着 i,v 的值,即使在table中已经被移除。
2、table.remove执行后,对应的 t 会自动整理好,整理方式是移除元素后把后面的元素往前推。
3、每一次 i,v 后,i 依然会根据正常顺序递增,即使 i 原本的 v 已经移除,被后一个 v 所替换,因此remove后下次 i,v 会跳过被移除的v的后一个元素。
pairs测试代码:
测试结果:
结果表明:
1、lua table中,无索引元素会自动添加索引,从1开始+1递增。如果无索引元素放在table最后,前面元素中索引与自动添加的索引相同的元素会被覆盖。
2、table.remove后,该元素之后按顺序的、连续的索引的元素会往前推,但是索引断开的元素不受影响,依然在原索引位置。