我有一个文件。在文件内部我存储了一个二维数组,如下所示:
[[0, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 0, 0, 1, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 0], [0, 1, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
数组的长度可能会有所不同,并且它们并不总是 10 个元素长。
我使用此方法从文件中读取数组:
map = IO.readlines("test.txt")
当我使用以下方式打印结果时:
map.each {|x| puts "#{x}"}
输出是我所期望的。但是如果我尝试使用以下方法获取行长度:
puts map[0].length
我得到了 320 而不是 10(这是我所期望的)。
有人可以解释一下为什么我得到的是 320
而不是 10
吗?
最佳答案
您应该使用 JSON#parse
而不是 IO#readlines
因为它是一个有效的 json:
require 'json'
JSON.parse(File.read("test.txt"))
#⇒ [[0, 0, 1, 0, 1, 0, 1, 0, 1, 0],
# [0, 0, 0, 0, 0, 0, 1, 1, 0, 0],
# [0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
# [0, 0, 0, 1, 0, 0, 1, 0, 0, 0],
# [0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0, 0, 1, 1, 1, 0],
# [0, 1, 1, 0, 1, 0, 1, 0, 1, 0],
# [0, 1, 0, 0, 0, 0, 0, 1, 0, 0],
# [0, 0, 0, 1, 0, 0, 0, 1, 0, 0],
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
关于arrays - 如何查找从文件中读取的二维数组的元素数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52079114/