加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

循环 – 在未排序的数组上ipairs是否可靠?

发布时间:2020-12-15 00:16:30 所属栏目:大数据 来源:网络整理
导读:我想知道是否有人可以确认你是否可以信任ipairs();对于索引完整但未排序的表,按顺序返回所有索引. 我们的项目遍布代码,使用pairs()克隆表,但克隆的任何数组都是无序的.我不确定这是否是一个问题. 相比: A = {10,20,30,40,50,60} 至: B = {[1] = 10,[2] = 2
我想知道是否有人可以确认你是否可以信任ipairs();对于索引完整但未排序的表,按顺序返回所有索引.

我们的项目遍布代码,使用pairs()克隆表,但克隆的任何数组都是无序的.我不确定这是否是一个问题.

相比:

A = {10,20,30,40,50,60}

至:

B = {[1] = 10,[2] = 20,[3] = 30,[4] = 40,[5] = 50,[6] = 60}

如果用pair()循环它们,则第一个是有序的,而另一个则不是. (在旁注中,如果你做了几个背面插入,B突然被分类)

回到原来的问题.上面的B似乎使用ipairs()按顺序迭代所有值,但是这总是有保证吗?

解决方法

Lua表没有订单.

它只是一组非零键,每个键与一个非零值相关联.

实现确实优化了“数字”键的存储,正整数值从1开始,到他们选择的点结束,增长和缩小内部结构,以及各种表操作的时间 – 内存权衡.

对操作表中的所有键值对.

ipairs在一个概念序列上运行,该序列是连续的正整数值键,其值为1,并在第一个nil值之前结束.其他键值对被忽略.所以,只要您对“索引完成”的想法匹配,您的答案就是“是的,按设计”.

table.sort做同样的事情.其他键值对被忽略.

默认表长度运算符(#)限制性更强.它对具有“序列”的表进行操作,这些表是没有带有正整数值的“数字”键的表(空序列),或者所有带有正整数值的“数字”键都是连续的序列,从1开始.如果对非序列使用默认表长度运算符,则会得到未定义的行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读