本文对从数据结构,存储和使用三个角度对lua之table的使用进行小结。

  1. 数据结构:
    table是lua的一种数据结构,可以用来存放各种类型的元素,例如可以创建数组和字典,以及二者混合的数据结构,
    例如:
    a={“hello”,“world”,“lua”} --数组
    b={a=“hello”,b=“world”,c=“lua”} --字典
    c={“hello”,b=“world”,“lua”} --数组元素和字典元素混合
  2. 存储:
    lua的table使用数组和哈希表结合的方式,使用string或者0和负数做key时,key都是保存在哈希段,使用正整数或没有key值的值,都保存在数组区
    如果以正整数作为key存储的key,与索引重复,则以索引的值为准
    例如对于如下定义的table
    local a={[3]=“world”,“my”,[2]=“hello”,“lua” }

    输出如下:
  3. 遍历方式:
    table的遍历方式有两种,由于table的数据结构比较灵活,所以其遍历方式也存在差别,下面从两种遍历方式的区别来梳理table的遍历规则
    3.1 ipairs只会输出有索引的数据,table不会给键值对一个索引,因此不会输出键值对,而pairs会输出table中的值和键值对,先顺序输出值,再乱序(键的哈希值)输出键值对。这是因为,table在存储值的时候是在数组区按照顺序的,但是在存储键值对的时候是按照键的哈希值存储的,并不会按照键的字母顺序或是数字顺序存储
    例如对于如下定义的table,两种遍历方式的输出分别如下:
    local a={“hello” ,b=“world”,“my”,“lua”}
    ipairs方式:

    输出:

    pairs方式:

    输出:

    3.2 ipairs遇到nil停止,pairs遇到nil继续
    例如对于如下定义的table
    local a={“hello” ,b=“world”,“my”,nil,“lua”}
    ipairs方式:

    输出:

    pairs方式:

    输出:

    3.3 以正整数作为key值定义的元素,key可以作为索引,将值存储在数组区,ipairs会根据key的数值从1开始加1递增遍历对应的table[i]值,直到出现第一个不是按1递增的数值时候退出;此时用pairs遍历键值时,依然是乱序输出,并不会按照索引顺序输出,而是与key的哈希值有关系,如1中所讲table在存储值的时候是按照顺序的,但是在存储键值对的时候是按照键的哈希值存储的,并不会按照键的字母顺序或是数字顺序存储
    例如对于如下定义的table
    local a={[4]=“hello” ,[5]=“world”,“my”,[2]=“lua”}
    ipairs方式:

    输出:

    pairs方式:

    输出:
  4. Lua中table和json的转换
    在lua中编写的服务器中,客户端发送的数据往往是json格式,那么在lua中就需要转换成lua自己的数据结构进行解析,如table。同样在如果lua希望通过json来发送一些业务数据,则同样需要将table转化为json格式。
    cjson可以实现table和json的转换,使用方式如下
    –引入cjson模块
    local cjson = require(“cjson”)
    local cjson=cjson.new()
    –将lua中的table类型的数据转换为json格式
    table_data={name=”xiaoxiao”,age=12}
    post_data=cjson.encode(table _data)
    –post_data={“name”:”xiaoxiao”,”age”:18}
    –将json格式的数据转换为lua的table
    table _data= cjson.decode(post_data)
    – table _data={name=”xiaoxiao”,age=12}

lua之table的使用相关推荐

  1. Lua 的table遍历 【转】

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rangercyh.blog.51cto.com/1444712/1032925 ...

  2. Lua 之table的测试

    一.lua 的 table构造 1.字符串作为table索引 法1. MyTable = {x = "xixi"} 法2. MyTable = {["x"] = ...

  3. Lua 中 table 库函数 table.concat 连接 函数

    Lua 中 table 库函数 table.concat 连接 函数 do--> table.concat 连接 函数 tab = {"a", "c", ...

  4. 【游戏开发解答】Unity使用lua将table转为树结构,以多级折叠内容列表的UI形式展现(树结构 | UGUI | 折叠展开 | lua)

    文章目录 一.前言 二.Unity lua环境 三.树节点 1.创建脚本:TreeNode.lua 2.封装节点 四.树逻辑 1.创建脚本:TreeLogic.lua 2.构造测试数据 3.构造树 4 ...

  5. lua中table.和table[]的区别

    lua中table.和table[]的区别 lua中的table可以定义为如下格式 local tab = { ["one"] = 1, ["two"] = 2 ...

  6. lua中table的常用方法

    转载:https://blog.csdn.net/Fenglele_Fans/article/details/83627021 1:table.sort() language = {"lua ...

  7. lua的table库中的常用函数总结

    table是Lua语言中的一种重要的数据类型, table 的一些特性简单列举如下:  (1).table 是一个"关联数组",数组的索引可以是数字或者是字符串;  (2).tab ...

  8. 如何打印出lua里table的内容

    不像开发as3时用fb有强大的断点调试功能,一般lua开发不用什么高级的ide,貌似也没有适合的,就直接用sublime.exvim等文本编辑器,直接编译运行看结果.所以不能很方便的知道变量值,特别是 ...

  9. Lua之table(表)

    Lua table(表) 使用表来统一表示Lua中的一切数据,是Lua区分于其他语言的一个特色.这个特色从最开始的Lua版本保持至今,很大的原因是为了在设计上保持简洁.Lua表分为数组和散列表部分,其 ...

最新文章

  1. fc天使之翼2020修改版下载_海岛奇兵无限钻石修改版下载-海岛奇兵无限钻石修改版下载2020...
  2. C语言实现bmp图像对比度扩展
  3. openCV图像矩阵Mat和二维数组的互相转换
  4. centos修改mysql密码_WAMP下修改MYSQL数据库密码
  5. SAP标准成本估算删除
  6. Spring重试–与项目集成的方式
  7. 99岁田家炳博士辞世!捐助300多所学校…
  8. 【JavaScript 封装库】BETA 2.0 测试版发布!
  9. FLTK学习笔记3-随机点名器
  10. 基于springboot+vue的毕业论文选题答辩管理系统
  11. Hadoop文章收集汇总 - 如禁止转载,请及时联系本人 收集学习互联网各位前辈分享的文章
  12. 战胜自己,征服北京四海记
  13. 15、三维表面重建-Occupancy Networks
  14. 微信公众号开发功能大全
  15. 计算广告CTR预估系列(九)--NFM模型理论与实践
  16. 华为交换机:利用Excel转换MAC地址公式
  17. Allegro PCB对某个网络进行高亮以及取消高亮
  18. 《自控力》总结_完结
  19. 快递与电商的恩怨纠纷
  20. CSDN大会后参观微软亚洲研究院

热门文章

  1. centerm高拍仪_升腾威讯云:桌面云2.0深度融合行业应用
  2. 如何实现文件高速传输,推荐镭速高速文件传输解决方案
  3. 根据数据库表结构生成Excel表设计——工具介绍
  4. DNSPod十问王瑨:如何靠卖域名成为百亿美金上市公司?
  5. Linux学习笔记-----vim下多行代码注释与取消
  6. 帮你强行杀死顽固不化的病毒进程
  7. 这样的情书,女生会喜欢吗
  8. cocos creator 3D | 拇指射箭
  9. 克鲁赛德战记php,克鲁赛德战记角色培养误区详解
  10. Vue中报“Duplicate keys detected: ‘xxx‘. This may cause an update error.”的解决办法