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()
的结果是一个字符串序列。@Nicolas
file:lines()
返回一个表,因为它是由
csv
打开的,而不是一个正常的
io.open()
“此时一切正常。”如何
ipairs
需要一个表,但是
file:lines()
的结果是一个字符串序列。@NicolBolas
file:lines()
返回一个表,因为它是由
csv
打开的,而不是正常的
io.open()
您是正确的,
val
是一个字符串。添加
tonumber(val)
修复了它。谢谢你说的对,
val
是一个字符串。添加
tonumber(val)
修复了它。谢谢