Как напечатать многомерный массив в ruby? - PullRequest
7 голосов
/ 20 сентября 2011

Какой предпочтительный метод печати многомерного массива в ruby?

Например, предположим, у меня есть этот 2D-массив:

x = [ [1, 2, 3], [4, 5, 6]]

Я пытаюсь напечатать его:

>> print x
123456

И что не работает:

>> puts x
1
2
3
4
5
6

Ответы [ 6 ]

12 голосов
/ 20 сентября 2011

Если вы просто ищете отладочный вывод, который легко читается, полезно использовать «p» (он вызывает inspect () для массива)

p x
[[1, 2, 3], [4, 5, 6]]
7 голосов
/ 20 сентября 2011

Либо:

p x

-или-

require 'pp'

. . .        

pp x
6 голосов
/ 05 июня 2013

Если вы хотите взять свой многомерный массив и представить его как визуальное представление двумерного графа, это прекрасно работает:

x.each do |r|
  puts r.each { |p| p }.join(" ")
end

Затем вы заканчиваете чем-то вроде этого в вашем терминале:

  1 2 3
  4 5 6
  7 8 9
4 голосов
/ 20 сентября 2011

PrettyPrint , который поставляется с Ruby, сделает это за вас:

require 'pp'
x = [ [1, 2, 3], [4, 5, 6]]
pp x

Однако вывод в Ruby 1.9.2 (который вы должны попытаться использовать, если это возможно) делает это автоматически:

ruby-1.9.2-p290 :001 > x = [ [1, 2, 3], [4, 5, 6]]
 => [[1, 2, 3], [4, 5, 6]] 
ruby-1.9.2-p290 :002 > p x
[[1, 2, 3], [4, 5, 6]]
 => [[1, 2, 3], [4, 5, 6]] 
2 голосов
/ 20 сентября 2011

«Основной» способ сделать это и способ, которым IRB делает это, состоит в том, чтобы напечатать вывод #inspect:

ruby-1.9.2-p290 :001 > x = [ [1, 2, 3], [4, 5, 6]]
 => [[1, 2, 3], [4, 5, 6]] 
ruby-1.9.2-p290 :002 > x.inspect
 => "[[1, 2, 3], [4, 5, 6]]"

pp производит немного более хороший выход, однако.

2 голосов
/ 20 сентября 2011

Итерация по каждой записи в массиве «включения». Каждая запись в этом массиве является другим массивом, так что итерируйте также. Распечатать. Или используйте join.

arr = [[1, 2, 3], [4, 5, 6]]

arr.each do |inner|
  inner.each do |n|
    print n # Or "#{n} " if you want spaces.
  end
  puts
end

arr.each do |inner|
  puts inner.join(" ") # Or empty string if you don't want spaces.
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...