这里简单汇总一下Lua 中的一些构造方法:
一、最简单的当然是空表:
t = {}二、简单一点的数字表和字符表:
n = {1, 2, 3, 4, 5} s = {"a", "b", "c", "d", "e"} 分别遍历它们: n = {1, 2, 3, 4, 5} for k in pairs(n) do print(k) end print("indexs & values") for i,v in ipairs(n) do print(i) print(v) end print("---------------") s = {"a", "b", "c", "d", "e"} for k in pairs(s) do print(k) end print("indexs & values") for i,v in ipairs(s) do print(i) print(v) end 输出结果可以知道,lua中的表,自动赋予了相应索引,可以按这样遍历出来
三、还可以这样创建直面的数组:
t = {[1]=10, [2]=20, [3]=30, [4]=40, [5]=50, [6]=60, [7]=70, [8]=80} 其实这个表和上面的没有区别,对于上面的纯粹数字表,也可以这样获取值: print(t[i])四、还可以创建字典型的表:
t = {["x"] = 10, ["y"] = 20, ["w"] = 30, ["k"]=40}可以简化为: t = {x = 10, y = 20, w = 30, k = 40} 获取值(注意如果是数字的key就不能用点取) print(t.x) print(t["x"]) 注意不能这样获取哦: print(t[x])这样的x是一个变量,除非这个变量就是"x"了并且这类型的表我们通过范型遍历并不能获取到他的value,只能通过这样达到效果:
t = {["x"] = 10, ["y"] = 20, ["w"] = 30, ["k"]=40} -- t = {x = 10, y = 20, w = 30, k = 40} print("indexs & values") for k in pairs(t) do print(k) print(t.k) end五、甚至,可以弄一些不“规范”的表类型:
t = {x = 12, y = 99, [3] = "hello"}同样地,要遍历这个表可以:
print("indexs & values") for k in pairs(t) do print(k) print(t[k]) end也可以在表中插入表:
t = { {x = 1, y = 2, w = 22}, {x = 3, y = 10, k = 33} }这样可以遍历出这个表结构:
function traversal(parm) -- 遍历函数 print("nested table") if(parm) then for k in pairs(parm) do print(k) print(parm[k]) end end end print("indexs & values") for k in pairs(t) do print(k) print(t[k]) traversal(t[k]) end六、甚至更复杂: polyline = { color="blue", thickness=2, npoints=4, {x=0, y=0}, {x=-10, y=0}, {x=-10, y=1}, {x=0, y=1} } 遍历的思路也是一样的: for i, v in ipairs(polyline) do print(i) print(v) end print("---------------") for k in pairs(polyline) do print(k) end print("---------------") print(polyline.color) print(polyline.thickness) print(polyline.npoints)
七、当然,你也可以放置函数和线程和别的数据类型进去:
local t = {} t.fun = function() print(123) end t.fun()协程: threads = {} local co = coroutine.create(function () print("this is a coroutine !") end) -- insert it in the list table.insert(threads, co)
最后,讲解一个巧用的例子: