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

随心笔谈3年前发布 admin
235 0 0

文章摘要

本文主要介绍了Lua中`table`数据结构的使用方法与功能。`table`在Lua中具有多重用途,既可以作为关联数组(类似于PHP数组或JavaScript对象),也可以作为哈希查找表(字典)。文章详细说明了如何通过`table`进行字典操作,包括使用字符串、数字和对象作为键,以及如何遍历`table`中的键值对。此外,文章还介绍了如何将`table`用作函数参数,如何在不加括号的情况下直接传递`table`,以及如何通过循环遍历`table`中的元素。此外,还提到了特殊表`_G`的用途,以及`table`在处理列表时的特殊索引方式(从1开始)。文章内容涵盖了`table`的创建、操作、遍历及其在不同场景中的应用,适合对Lua编程有一定基础的读者阅读。



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

复制代码 代码如下:

— 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简例

© 版权声明

相关文章