2011-09-19 9 views
6

Quelle est la méthode préférée d'impression d'un tableau multidimensionnel dans ruby?Comment imprimer un tableau multidimensionnel dans ruby?

Par exemple, supposons que je ce tableau 2D:

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

J'essaie d'imprimer:

>> print x 
123456 

aussi ce qui ne fonctionne pas:

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

Oh, je pensais que vous vouliez dire une grille. Ça ne fait rien. –

Répondre

12

Si vous êtes à la recherche pour la sortie de débogage qui est facile à lire, "p" est utile (il appelle l'inspection() sur le tableau)

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

itérer sur chaque entrée dans le tableau "englobant". Chaque entrée de ce tableau est un autre tableau, donc passez en revue cela aussi. Impression. Ou, utilisez 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

Soit:

p x 

-ou-

require 'pp' 

. . .   

pp x 
+0

+1 pour mentionner «pp», dont je ne savais même pas qu'il existait. Il semble faire la même chose que d'inspecter pour cet exemple sur ruby ​​1.9.2 cependant. – spike

4

PrettyPrint , Qui est livré avec Ruby, fera pour vous:

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

Cependant, la sortie de Ruby 1.9.2 (que vous devriez essayer d'utiliser, si possible) fait automatiquement:

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

Le façon « fondamental » de le faire, et la façon dont la CISR le fait, est d'imprimer la sortie de #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 produit un peu plus agréable sortie, cependant.

5

Si vous voulez prendre votre tableau multidimensionnel et de le présenter comme une représentation visuelle d'un graphe à deux dimensions, cela fonctionne bien:

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

Puis vous finissez avec quelque chose comme ceci dans votre terminal:

1 2 3 
    4 5 6 
    7 8 9 
+0

quelle est l'utilisation de '.map {| p | p} '?! – muichkine

+0

merci pour la note. vous pourriez faire chacun au lieu de la carte. Je vais éditer l'échantillon à utiliser car il est plus approprié à cet effet. – ogoldberg

Questions connexes