【发布时间】:2016-09-19 18:16:52
【问题描述】:
我有一个数组tiles,它包含一个tileset 中的tile。我还有一个 15x10 二维数组 room,它的数字对应于 tiles 中的图块。我遇到的问题是:
room = { ... } -- 15x10 2d array
csv = require("csv") -- load a csv file, not relevant to the problem
file = csv.open("room/room-0.0.csv")
row = 1
for fields in file:lines() do
for col, val in ipairs(fields) do
room[row][col] = val
end
row = row + 1
end
-- room looks something like this:
-- { {1, 4, 2, 3, 2, ...},
-- ...
-- {3, 3, 2, 4, 2, ...} }
此时一切都很好。不过,这里出了问题:
tiles = {"banana", "apple", "orange", "pitaya"}
for i, j in ipairs(room) do -- looping through room
print("-------")
for k, tilenum in ipairs(j) do -- tilenum = room[i][k]
print(tiles[tilenum]) -- tiles[room[k][i]]
end -- tiles[tilenum] == nil
end
输出:
-------
nil
nil
nil
nil
nil
...
应该发生什么:
-------
banana
pitaya
apple
orange
apple
...
注意:虽然tiles 中的实际对象是不可打印的,但我已经用数字、字符串等尝试了这个示例。它们不起作用。
【问题讨论】:
-
"此时一切正常。" 怎么样?
ipairs需要一个表,但来自file:lines()的结果是一个 字符串 序列。 -
@NicolBolas
file:lines()返回一个表,因为它是由csv打开的,而不是普通的io.open()
标签: arrays multidimensional-array lua