我们继续来学一些东西
多维数组
数组这东西咱们之前其实已经学过了,基本上没什么说的了,因为lua里面数组字典都是一个东西
但是有一个东西不得不提那就是table的数组的一面的多维数组性
说人话就是和其他语言一样,lua的数组也可以嵌套,而且用法一模一样
二维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| local matrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }
print(matrix[1][1]) print(matrix[2][3]) print(matrix[3][2])
for i = 1, #matrix do for j = 1, #matrix[i] do io.write(matrix[i][j], " ") end print() end
|

三维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| local cube = { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } }
for i = 1, #cube do print("layer", i)
for j = 1, #cube[i] do for k = 1, #cube[i][j] do io.write(cube[i][j][k], " ") end print() end
print() end
|

递归遍历数组
因为手动敲代码非常麻烦,而且每增加一层数组就要套上一个for循环,所以我们采用递归遍历,实现一劳永逸
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
local function walkArray(t, callback, path)
path = path or {}
for k, v in pairs(t) do
path[#path + 1] = k
if type(v) == "table" then
walkArray(v, callback, path)
else
callback(v, path)
end
path[#path] = nil end end
local cube = {
{ { 1, 2, 3 }, { 4, 5, 6 } },
{ { 7, 8, 9 }, { 10, 11, 12 } } }
walkArray(cube,
function(value, path)
io.write("index ")
for i = 1, #path do io.write("[" .. path[i] .. "]") end
print(" = " .. value)
end )
|

你别说,我真的看不懂这写的什么意思,我以前从来没有认真看过递归(因为用不上我也从来不看这个),现在理解起来还是有点困难的
评论区