2011-09-19 11 views
6

Qual è il metodo preferito per stampare un array multidimensionale in rubino?Come si stampa un array multidimensionale in ruby?

Per esempio, supponiamo di avere questa matrice 2D:

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

provo a stamparlo:

>> print x 
123456 

Anche ciò che non funziona:

>> puts x 
1 
2 
3 
4 
5 
6 
+0

Oh, pensavo che intendessi come una griglia. Non importa. –

risposta

12

Se siete solo in cerca di debug che è facile da leggere, "p" è utile (si chiama ispezionare() sulla matrice)

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

iterare ogni voce nell'array "enclosing". Ogni voce in quell'array è un'altra matrice, quindi va a finire anche quella. Stampare. In alternativa, utilizzare 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 
7

O:

p x 

oppure

require 'pp' 

. . .   

pp x 
+0

+1 per aver menzionato "pp", che non sapevo nemmeno esistesse. Sembra fare la stessa cosa di ispezionare per questo esempio su Ruby 1.9.2. – spike

4

PrettyPrint , Che viene fornito con Ruby, lo farà per voi:

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

Tuttavia l'uscita in Ruby 1.9.2 (che si dovrebbe cercare di utilizzare, se possibile) lo fa automaticamente:

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

Il modo 'fondamentale' per fare questo, e il modo in cui IRB lo fa, è quello di stampare l'output di #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 produce un output leggermente più bello, però.

5

Se si vuole prendere la vostra array multi-dimensionale e presentarlo come una rappresentazione visiva di un grafico bidimensionale, questo funziona bene:

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

poi si finisce con qualcosa di simile nel terminale:

1 2 3 
    4 5 6 
    7 8 9 
+0

a cosa serve '.map {| p | p} '?! – muichkine

+0

grazie per la nota. potresti fare ognuno invece della mappa. Modificherò il campione per utilizzarlo poiché è più appropriato per questo scopo. – ogoldberg

Problemi correlati