2011-09-19 17 views
6

¿Cuál es el método preferido para imprimir una matriz multidimensional en ruby?¿Cómo imprimo una matriz multidimensional en ruby?

Por ejemplo, supongamos que tengo esta matriz 2D:

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

trato de imprimirlo:

>> print x 
123456 

También lo que no funciona:

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

Oh, pensé que quería decir como una grilla. No importa. –

Respuesta

12

Si usted está buscando para la depuración de salida que es fácil de leer, "p" es útil (se llama a inspeccionar() en la matriz)

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

iterar cada entrada en la matriz "adjuntando". Cada entrada en esa matriz es otra matriz, así que itere sobre eso también. Impresión. O bien, use 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 bien:

p x 

-o-

require 'pp' 

. . .   

pp x 
+0

+1 por mencionar 'pp', que ni siquiera sabía que existía. Parece hacer lo mismo que inspeccionar para este ejemplo en ruby ​​1.9.2. – spike

4

PrettyPrint , Que viene con Ruby, lo hará por usted:

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

Sin embargo la salida en Ruby 1.9.2 (que se debe tratar de utilizar, si es posible) lo hace automáticamente:

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

El camino 'fundamental' para hacer esto, y la forma en que lo hace IRB, es imprimir la salida 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 produce resultados ligeramente más agradable, sin embargo.

5

Si usted quiere llevar su matriz multi-dimensional y presentarlo como una representación visual de un gráfico bidimensional, esto funciona muy bien:

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

Entonces termina con algo como esto en su terminal:

1 2 3 
    4 5 6 
    7 8 9 
+0

¿De qué sirve '.map {| p | p} '?! – muichkine

+0

gracias por la nota. podrías hacer cada uno en lugar de un mapa. Editaré la muestra para usarla, ya que es más apropiada para este propósito. – ogoldberg

Cuestiones relacionadas