使用二维数组中的值索引一维数组

我有一个数组 tiles,其中包含一个图块集中的图块。我还有一个 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            -- 循环 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 中的对象无法打印,但我已经尝试使用数字、字符串等例子。它们不能工作。

点赞
用户1442917
用户1442917

你没有展示tilenum的值,但我猜即使它是一个数字,它也用字符串的形式存在,当索引Lua表时,"1"索引和1索引并不相同(这可能是你的tiles[tilenum]返回nil的原因)。

你需要检查你分配给val的值(后来变成tilenum),如果它们确实是数字,那么就把= val改成= tonumber(val)

2016-05-23 01:45:10