Arrays 使用二维数组中的值索引一维数组
我有一个数组,Arrays 使用二维数组中的值索引一维数组,arrays,multidimensional-array,lua,Arrays,Multidimensional Array,Lua,我有一个数组,tiles,它在tileset中包含tiles。我还有一个15x10的二维数组,房间,它的编号对应于瓷砖中的瓷砖。我遇到的问题是: 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
tiles
,它在tileset中包含tiles。我还有一个15x10的二维数组,房间
,它的编号对应于瓷砖
中的瓷砖。我遇到的问题是:
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
...
注意:虽然
平铺中的对象实际上是不可打印的,但我用数字、字符串等尝试了这个示例。它们不起作用。您没有显示平铺的值,但我怀疑即使它是一个数字,它也是字符串形式的,在索引Lua表时,“1”
索引与1
索引不同(这可能就是为什么平铺[tilenum]
返回nil
)
您需要检查分配的val
值(后来变成tilenum
),如果它们确实是数字,则将=val
更改为=tonumber(val)
您没有显示tilenum
的值,但我怀疑即使它是一个数字,它也是字符串形式的,在索引Lua表时,“1”
索引与1
索引不同(这可能就是为什么平铺[tilenum]
返回nil
)
您需要检查分配的val
值(后来变成tilenum
),如果它们确实是数字,则将=val
更改为=tonumber(val)
“此时一切正常。”如何ipairs
需要一个表,但是file:lines()
的结果是一个字符串序列。@Nicolasfile:lines()
返回一个表,因为它是由csv
打开的,而不是一个正常的io.open()
“此时一切正常。”如何ipairs
需要一个表,但是file:lines()
的结果是一个字符串序列。@NicolBolasfile:lines()
返回一个表,因为它是由csv
打开的,而不是正常的io.open()
您是正确的,val
是一个字符串。添加tonumber(val)
修复了它。谢谢你说的对,val
是一个字符串。添加tonumber(val)
修复了它。谢谢