1 --代码: 2 3 tab1 = { key1 = "val1", key2 = "val2","val2", "val3" ,} 4 for k, v in pairs(tab1) do 5 print(k .. " - " .. v) 6 end 7 8 tab1.key1 = nil 9 for k, v in pairs(tab1) do 10 print(k .. " - " .. v) 11 end 12 13 --运行结果: 14 1 - val2 15 2 - val3 16 key1 - val1 17 key2 - val2 18 1 - val2 19 2 - val3 20 key2 - val2
以上说明了 lua的数组(table)是一个可以检索的数组,可以检索字符的,同时具备了json和c语言的数组,应该要比链表的效率要好点(不能快速检索,必须依靠多叉树),另一方面 table没有0,至少从1开始。两个没有有检索的普通字符,将按照先后顺序,1、2排序参照上图。print 字符串和 数字等用‘,’隔开或者使用“..”隔开,唯一区别就是后者是可字符串紧密结合的,前者有很大空间。
table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil。
-- table_test.lua 脚本文件 a = {} a["key"] = "value" key = 10 a[key] = 22 a[key] = a[key] + 11 for k, v in pairs(a) do print(k .. " : " .. v) end
结果:
10 : 33
key : value
for循环的不同 k说明定位,如“KEY”,排列在前面的是检索,v是对应的数值,没有特殊检索的都是数字检索,比如 10 、 1、2.....
-- table_test2.lua 脚本文件 local tbl = {"apple", "pear", "orange", "grape"} for key, val in pairs(tbl) do print("Key", key) end 结果: Key 1 Key 2 Key 3 Key 4
从上述可以看到,优化了print函数。
function匿名函数
-- function_test2.lua 脚本文件 function testFun(tab,fun) for k ,v in pairs(tab) do print(fun(k,v)); end end tab={key1="val1",key2="val2"}; testFun(tab, function(key,val)--匿名函数 return key.."="..val; end );
结果:
key1 = val1
key2 = val2