2016-05-23 23 views
1

私はタイルセットにタイルを含む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で、実際のオブジェクトが印刷可能ではありませんが、私が持っています数字、文字列などでこの例を試しました。これらは動作しません。

+0

"この時点ですべてはうまくいきます。 'ipairs'はテーブルを必要としますが、' file:lines() 'の結果は* strings *のシーケンスです。 –

+0

@NicolBolas 'file:lines()'は、通常の 'io.open()'の代わりに 'csv'によってオープンされているのでテーブルを返します。 – user1610406

答えて

0

あなたはtilenumの値を示していないが、私はそれが数だとしても、それは文字列形式でだ、とLuaのテーブルのインデックスを作成する際に、"1"インデックスは1インデックスと同じではありません(と、なぜあなたのそれはおそらくだと思われますtiles[tilenum]nilを返します)。

tilenumに割り当てられたvalの値をチェックし、実際に数値である場合は= val= tonumber(val)に変更する必要があります。

+0

正しいです、' val'は文字列でした。 'tonumber(val)'を追加することで修正されました。ありがとう – user1610406

関連する問題