举例讲解Lua中的Table数据结构(lua_settable)干货分享

随心笔谈2年前发布 编辑
161 0
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买



文中– 两个横线开始单行的注释,–[[加上两个[和]表示多行的注释–]]。    

复制代码 代码如下:

— Table=Lua唯一的数据结构;

—         它们是关联数组。

— 类似于PHP的数组或者js的对象,

— 它们是哈希查找表(dict),也可以按list去使用。

复制代码 代码如下:
— 按字典/map的方式使用Table:

— Dict的迭代默认使用string类型的key:

t={key1=’value1′, key2=false}

复制代码 代码如下:

— String的key可以像js那样用点去引用:

print(t.key1)  — 打印 ‘value1’.

t.newKey={}  — 添加新的 key/value 对。

t.key2=nil   — 从table删除 key2。

复制代码 代码如下:

— 使用任何非nil的值作为key:

u={[‘@!#’]=’qbert’, [{}]=1729, [6.28]=’tau’}

print(u[6.28])  — 打印 “tau”

复制代码 代码如下:

— 对于数字和字符串的key是按照值来匹配的,但是对于table则是按照id来匹配。

a=u[‘@!#’]  — 现在 a=’qbert’.

b=u[{}]     — 我们期待的是 1729,  但是得到的是nil:

— b=nil ,因为没有找到。

— 之所以没找到,是因为我们用的key与保存数据时用的不是同一个对象。

— 所以字符串和数字是可用性更好的key。

复制代码 代码如下:

— 只需要一个table参数的函数调用不需要括号:

function h(x) print(x.key1) end

h{key1=’Sonmi~451′}  — 打印’Sonmi~451′.

复制代码 代码如下:

for key, val in pairs(u) do  — Table 的遍历.

  print(key, val)

end

复制代码 代码如下:

— _G 是一个特殊的table,用于保存所有的全局变量

print(_G[‘_G’]==_G)  — 打印’true’.

复制代码 代码如下:
— 按list/array的方式使用:

— List 的迭代方式隐含会添加int的key:

v={‘value1’, ‘value2’, 1.21, ‘gigawatts’}

for i=1, #v do  — #v 是list的size

  print(v[i])  — 索引从 1 开始!! 太疯狂了!

end

— ‘list’并非真正的类型,v 还是一个table,

— 只不过它有连续的整数作为key,可以像list那样去使用。

您可能感兴趣的文章:深入谈谈lua中神奇的tableLua Table转C# Dictionary的方法示例Lua中设置table为只读属性的方法详解Lua编程示例(一):select、debug、可变参数、table操作、errorLua table中安全移除元素的方法Lua的table库函数insert、remove、concat、sort详细介绍C++遍历Lua table的方法实例Lua中释放table占用内存的方法Lua中table的遍历详解Lua中获取table长度问题探讨Lua中获取table长度的方法Lua中table里内嵌table的例子Lua面向对象编程之基础结构table简例

© 版权声明

相关文章