Lua资料之表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sky6even/article/details/90521770

表( table )是Lua 里唯一的数据结构, 可以近似地理解为其他编程语言里的字典、关联数组或者key - value 映射,但Lua的表更加灵活,能够模拟出array 、list 、dict 、set, map 等常见数据结构,或者其他任意复杂的结构。

◆ 定义表

Lua 里定义表使用花括号“{}”。

local a = {3,5,7}  --声明一个数组形式的表
local a = {one=1,['two']=2}  --声明一个字典形式的表

注意在使用“ key=value ”的形式时key 不需要用单引号或双引号,如果必须要用( 例如key 里有空格或者其他特殊符号) 则要使用“[key]=value ” 的形式。

◆ 操作表

操作表里的元素需要使用方括号“ [] ”:

assert(a[1] == 3 and a[2] == 5)  --使用[]访问数组里的元素,整数key
a[1] = 100  --修改第一个元素的值

assert(d['one']) == 1)  --使用[]访问字典里的元素,字符串key
d['three']) = 3  --添加一个新元素

如果key 是字符串我们也可以直接使用点号“ . ”来操作, 这时表就可以模拟其他语言里的类或名字空间特性,存储成员变量或成员函数。

x. job = 'hunter'    --使用“.”访问表里的元素,字符串key

x.mission = function(dst)     --为表添加一个函数变量,相当于成员函数
	print('fly to', dst)
end

x.mission('zebes')  -- 执行成员函数

运算符“#”可以计算形式表里的数组元素数量,配合for 循环可以实现遍历数组。对于字典形式的表,暂时没有办法能够直接获取元素的数量,使用“#”会返回0。

assert(#a == 3)

for i=1, #a do
	print(a[i],’,’ )
end

◆ 范围循环:

范围循环主要用于遍历表里的元素,但需要两个标准库函数的配合: ipairs()和pairs() 。这两个函数起到迭代器的作用,逐个返回表里的key/value。

1、ipairs():

ipairs()只能遍历数组形式的表:

for i,v in ipairs(a) do
	print(a[i],',')
end

2、pairs():

pairs()可以遍历任意的表

for k,v in pairs(x) do
	print(k,'=>', v)
end

◆ 作为函数参数:
因为表通常都很大,所以当表作为函数的参数时不是传值的方式,而是传引用的方式,也就是说没有拷贝,直接传递表的“引用”,函数体内可以直接修改表的元素。

local function f(v)                --定义函数, 表传递的是引用
	v . name = v.name . . 'aran'   --函数内部可以直接修改表的元素
end

f(x)                               --行函数, 表被修改
print(x.name)

猜你喜欢

转载自blog.csdn.net/sky6even/article/details/90521770
今日推荐