【问题标题】:Indexing 1d array with values in a 2d array用二维数组中的值索引一维数组
【发布时间】:2016-09-19 18:16:52
【问题描述】:

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

【问题讨论】:

  • "此时一切正常。" 怎么样? ipairs 需要一个表,但来自 file:lines() 的结果是一个 字符串 序列。
  • @NicolBolas file:lines() 返回一个表,因为它是由 csv 打开的,而不是普通的 io.open()

标签: arrays multidimensional-array lua


【解决方案1】:

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

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

【讨论】:

  • 你是对的,val 是一个字符串。添加tonumber(val) 修复它。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2021-06-04
  • 1970-01-01
  • 2020-07-30
  • 2015-06-16
  • 1970-01-01
  • 2019-07-28
相关资源
最近更新 更多