使用2d数组

时间:2016-05-23 01:07:51

标签: arrays multidimensional-array lua

我有一个数组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中的对象不可打印,但我已尝试使用数字,字符串等示例。它们不起作用。

1 个答案:

答案 0 :(得分:0)

您没有显示tilenum的值,但我怀疑即使它是一个数字,它也是字符串形式,并且在索引Lua表时,"1"索引与{不同{1}}索引(这可能是1返回tiles[tilenum])的原因。

您需要检查分配的nil值(稍后变为val),如果它们确实是数字,则将tilenum更改为= val