阎良网站建设,做商务网站要多少钱,知名广州网站建设,湘潭网站建设方案费用这个的文章挺多的#xff0c;但是有好几种说法并且不全。有人说是忽略手动设定值#xff0c;有人说是从1开始数#xff0c;直到序号断开#xff0c;还有人给出结果#xff0c;但是和我实机测试的效果不一样#xff0c; 所以我自己总结一篇。经过我的测试和总结得到以下结…这个的文章挺多的但是有好几种说法并且不全。有人说是忽略手动设定值有人说是从1开始数直到序号断开还有人给出结果但是和我实机测试的效果不一样 所以我自己总结一篇。经过我的测试和总结得到以下结论ipairs是一个专用的遍历函数主要用于遍历数组即索引为正整数的表。可以用于遍历表中的所有键值对其中键仅限于正整数。ipairs遍历和手动设置序号的先后位置无关优先从非手动设定位置从左向右开始计算非手动设置的索引计算非手动设置的索引时会跳过手动设定的索引计算完非手动设定的索引后寻找手动设定索引如果手动设定的序号能连上则算上手动设置的索引连续打印直到序号断开。根据以上结论尝试推断以下表输出a{[5]hello,[3]2,3,4}
for i, v in ipairs(a) doprint(i, v)
end从非手动设定位置优先开始从左向右计算索引则为[1]3,[2]4,之后寻找手动设定序号[3]2。之后继续寻找只找到5数字连续性断开所以只能打印到3的索引。推测结果为[1]3,[2]4,[3]2和实际结果相符。以下为推论部分接下来我们将通过几个实例来推导出具体的原理例子一a{[1]hello,2,[2]3,4,5}
for i, v in ipairs(a) doprint(i, v)
end结果如下。手动设定的[1]和[2]并没有打印出来所以猜测lua会忽略手动设定值从2开始计算索引2索引为14索引为25索引为3例子二a{[1]hello,[2]2,[3]3}
for i, v in ipairs(a) doprint(i, v)
end例子一中是忽略手动设定的key值但是例子二中全部手动设定得到结果却是全部输出。因此我认为lua并不会忽略手动设定的整数值索引猜测如果全部手动设定且为连续正整数则可以识别如果其中有不是手动设定的则优先非手动设置的开始计算索引例子三a{[1]hello,[2]2,3}
for i, v in ipairs(a) doprint(i, v)
end如图根据以上推断优先计算3的索引为1此时3明明在后面但结果却是3,2。说明3索引为12索引为2hello的索引断开。这个例子说明序号可以倒序相连。猜测ipairs是全部元素遍历完后再寻找连续序号输出直到序号断开例子四a{[3]hello,[2]2,3}
for i, v in ipairs(a) doprint(i, v)
end倒序输出了32Hello。因此可以推断以上假设为真。因此得出重要结论ipairs遍历和序号先后位置无关从非手动设定位置优先从左向右开始计算索引非手动设定位置索引计算完成后寻找手动设定索引如果序号能连上则算上手动设置的索引连续打印直到序号断开。例子五根据以上推断尝试推断以下表输出a{[5]hello,[3]2,3,4}
for i, v in ipairs(a) doprint(i, v)
end从非手动设定位置优先开始从左向右计算索引则为[1]3,[2]4,之后寻找手动设定序号[3]2。之后继续寻找只找到5数字连续型断开所以只能打印到3的索引。推测结果为[1]3,[2]4,[3]2和实际结果相符。同时根据此结论可以知道例子一a{[1]hello,2,[2]3,4,5}的输出为何忽略了[1]1和[2]3因为2,4,5分别占用了1,2,3的索引接下来要寻找的索引应该是4了所以忽略掉了[1]和[2]此时若把[1]Hello和[2]3改为[4]hello,[5]3则可以打印出2,4,5,hello,3。a{[4]hello,2,[5]3,4,5}
for i, v in ipairs(a) doprint(i, v)
end和实际结果相符。例子七非手动索引时如何计算的只计算连续的默认索引还是会跨过手动设置的索引a{[2]0,[4]0,1,2,3,[5]6,7,8,9}
for i, v in ipairs(a) doprint(i, v)
end如果是分块连续索引则应该是1,2,3后寻找手动索引,得到[4]0,[5]6即12306如果是跳过非手动设置索引则应是,1,2,3,7,8,9实际结果如下因此是跳过手动设置的索引进行计算的。