私はタイルセットにタイルを含むtiles
という配列を持っています。私はまた、tiles
のタイルに対応する数字を持つ15×10の2次元配列room
を持っています。私が問題を抱えているのは次のとおりです。2次元配列の値を持つ1次元配列のインデックス付け
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() 'の結果は* strings *のシーケンスです。 –
@NicolBolas 'file:lines()'は、通常の 'io.open()'の代わりに 'csv'によってオープンされているのでテーブルを返します。 – user1610406