如何从文件中读取二维数组的元素数?

问题描述 投票:2回答:1

我有一个文件。在文件中我存储了一个二维数组,如下所示:

[[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

arrays ruby multidimensional-array
1个回答
5
投票

你应该使用IO#readlines代替JSON#parse,因为它是一个有效的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]]
© www.soinside.com 2019 - 2024. All rights reserved.