美文网首页cocos2d-Luacocos2d
关于lua表更纯粹一些 性能会有所提升 全数组 或者全key表

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

作者: 人气小哥 | 来源:发表于2017-11-03 17:11 被阅读4次

原文: 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部分,纯粹一些,性能上会有提升.

相关文章

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

    原文: http://www.codedump.info/?p=296 输出为: in print_ipairs1...

  • Zsh 开发指南(第六篇 哈希表)

    导读 哈希表是比数组更复杂的数据结构,在某些语言里被称作关联数组或者字典等等。简单说,哈希表用于存放指定键(key...

  • 全表扫描对内存的影响

    全表扫描对 server 层的影响 假如扫描的是InnoDB引擎表,那么全表扫描会扫描所有的主键索引。将所查到的每...

  • MySQL如何避免全表扫描

    MySQL全表扫描在大多数场景下性能都是非常低下的,尤其在表数据量特别大的情况下,全表扫描会耗尽数据库资源,严重时...

  • lua 构建key表链表组合体

    lua 构建key表链表组合体 有些时候 我们需要用key表 存储一些数据这样方便直接使用key来索引想要的数据但...

  • mongo索引

       不使用索引的查询称为全表扫描。通常来说,应该尽量避免全表扫描,全表扫描的效率非常低。   创建索引: db....

  • code搬运工_关于Phoenix的Secondary Inde

    存储在HBase中的数据:(1) HBase唯一索引 primary row key(2) 全表扫描 scan(...

  • mysql导出相关数据

    导出某库全表为SQL语句 直接导出某库全表(包括表设计和表数据)为SQL语句 导出某个表为特定文件格式 导出某个表...

  • Lua元表

    Lua元表 在Lua中,我们可以通过key找到对应的value值,但是无法对两个table进行操作。 在Lua中为...

  • 关于数据查询索引失效走全表扫描的问题

    每个版本我们都要进行全表扫描的检查,会发现明明字段加上索引,但还是走了全表扫描,所以进行了简单的分析。 影响全表扫...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/afotmxtx.html