关于lua表更纯粹一些 性能会有所提升 全数组 或者全key表

原文: http://www.codedump.info/?p=296

function print_ipairs(t)
  print("in print_ipairs")
  for k, v in ipairs(t) do
    print(k)
  end
end 

function print_pairs(t)
  print("in print_pairs")
  for k, v in pairs(t) do
    print(k)
  end
end 

a = {}
a={1,2,3,4,5,6,7,8,9,10}
print_ipairs(a)
a[2] = nil
a[3] = nil
a[4] = nil
a[6] = nil
a["k"] = "e"
print_ipairs(a)
print_pairs(a)

输出为:

in print_ipairs
1
2
3
4
5
6
7
8
9
10
in print_ipairs
1
in print_pairs
1
7
8
10
k
5
9
在这里,首先对表a赋值,有1-10共十个元素,通过调用函数print_ipairs可知,这些元素都是存放在数组部分的,这是因为ipairs取的是Table的数组部分元素.
在这之后,人为的将其中2,3,4,6元素删除,造成原来数组不满一半元素被利用上的现象,然后再插入一个新key "k",以让这个Table重新分配空间.再此之后,再次调用ipairs遍历a的数组部分,可以看到只有1被打印出来了,也就是说,在重新分配空间之后,除去已经被删除的2,3,4,6之外,只有1还在数组里面,剩下的5,7,8,9,10已经不在数组部分了.紧接着调用pairs遍历这个表,可以看出这些已经不在数组部分的值又被打印出来了,并且它们的顺序已经被打乱,不再按照数字大小顺序来排列了,它们在这次重新分配中被挪动到了hash部分.

这个实验既验证了我们前面的分析,同时也告诉我们,Table的重新分配,实际上代价是很大的,因此不建议在实际程序中,一个Table即有数组部分,也有Hash部分,纯粹一些,性能上会有提升.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,624评论 18 399
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,443评论 0 3
  • 早安!今后的大半个月,我又要走在路上了。让我庆幸的是,我不但为了谋生,亦为了谋爱。 ps:图片来自朋友。
    老藏漂小康阅读 2,454评论 0 1
  • 第二章 相遇与“重逢” 1 假期的第三天晚上...
    艾伦潘阅读 2,669评论 0 1
  • 作为ibireme童鞋的仰慕者....相信大家都灰常了解他的YYModel,在这里作为渣渣的我就把YYModel那...
    philiha阅读 5,151评论 0 50

友情链接更多精彩内容