2010-08-21 5 views
0

J'essayais de me familiariser avec les matrices de Ruby. J'essaie d'initialiser une matrice avec une entrée en format de chaîne. J'ai essayé le code suivant, mais il ne fonctionne pas. S'il vous plaît aidez-moi ce que je fais mal.Opération matricielle Ruby

input = 
'08 02 22 97 
    49 49 99 40 
    81 49 31 73 
    52 70 95 23' 

x = Matrix.rows(input.lines() { |substr| substr.strip.split(//) }) 

puts x[0,0] #I expect 8. but I am getting 48 which is not even in the matrix 

Je suppose que je n'initialise pas correctement la matrice. Aidez-moi, s'il vous plaît.

Répondre

4
x = Matrix.rows(input.lines.map { |l| l.split }) 
x[0,0] # => "08" 

Si vous souhaitez obtenir des entiers en arrière, vous pouvez le modifier comme ceci:

Matrix.rows(input.lines.map { |l| l.split.map { |n| n.to_i } }) 
x[0,0] # => 8 
+0

Merci, il a travaillé génial!! – bragboy

2

48 est le code ASCII de '0'. Vous devez utiliser to_i sur la scission comme ceci:

x = Matrix.rows(input.lines().map { |substr| substr.strip.split(/ /).map {|x| x.to_i} }) 

S'il vous plaît noter également la division (/ /), sinon, il serait divisé pour tous les caractères et vous vous retrouvez avec 0 8 0 2 etc ...

+0

salut, il me donne encore 48 – bragboy

+2

c'est exactement le même code que votre solution acceptée :) – Zaki