2011-01-30 6 views
1
puts WINNING_ROWS.each{ |solution| "[ #{solution.map{ |space| "#{space}"}} ]"} 

J'ai essayé de faire ce qui précède, mais il ne fait que lister chaque valeur avec une nouvelle ligne char par la suite.Ruby: comment imprimer un tableau 2D?

J'essaie d'obtenir la sortie:

[stuff,in,row,1] 
[stuff,in,row,2] 
etc 

Répondre

2

On pourrait faire quelque chose comme ceci:

WINNING_ROWS = [[1,2,3],[4,5,6]] 
WINNING_ROWS.map { |x| x.inspect }.join("") 

Ce qui vous permet d'obtenir une chaîne formatée comme vous avez demandé

7

Si cela est juste pour le débogage, la manière habituelle est de dire soit

p expression 

ou

puts expression.inspect 

. ..qui est à peu près la même chose.

Vous pouvez également utiliser pp.

require 'pp' 
pp expression 

pp(expr) 
+1

.inspect est SOOOO utile. .. vache sacrée. – NullVoxPopuli

+0

@DerNalia Débordement de dépassement de débordement de débordement de pile? –

1

Vous utilisez la valeur par défaut to_s de Array. #each renvoie le tableau lui-même. Donc ce que vous faites est la même chose que WINNING_ROWS. Aussi, gardez à l'esprit que puts ajoute une nouvelle ligne à la fin, donc si vous ne voulez pas que vous utilisiez write (qui n'est pas disponible dans le module Kernel comme puts, vous devez l'appeler directement sur votre sortie STDOUT).

Vous voulez probablement quelque chose comme:

WINNING_ROWS = [[1,2,3],[4,5,6]] 
WINNING_ROWS.each {|row| STDOUT.write row.inspect } 

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

# or this may work for you as well 
# STDOUT.write WINNING_ROWS.inspect