2009-11-29 5 views
2

J'ai ce code pour diviser une chaîne en groupes de 3 octets:Aide avec des tableaux multidimensionnels dans Ruby

str="hello" 
ix=0, iy=0 
bytes=[] 
tby=[] 
str.each_byte do |c| 
    if iy==3 
     iy=0 
     bytes[ix]=[] 
     tby.each_index do |i| 
      bytes[ix][i]=tby[i] 
     end 
     ix+=1 
    end 
    tby[iy]=c 
    iy+=1 
end 
puts bytes 

J'ai basé sur cet exemple: http://www.ruby-forum.com/topic/75570

Cependant, je reçois le type les erreurs de celui-ci. Merci.

+1

Et les erreurs de type sont ...? – rfunduk

+0

ne peut pas convertir Array en Integer .. mais l'exemple est presque exactement le même et ne pas obtenir ces erreurs de type – unknown

Répondre

6

ix = 0, iy = 0 se traduit ix = [0, (iy = 0)] , c'est pourquoi vous obtenez une erreur de type.

Cependant, il y a une façon de faire moins "procédurale" ce que vous voulez faire:

Ruby 1.8.7+:

"hello world".each_byte.each_slice(3).to_a 
#=> [[104, 101, 108], [108, 111, 32], [119, 111, 114], [108, 100]] 

Ruby 1.8.6:

require 'enumerator' 
"hello world".enum_for(:each_byte).enum_for(:each_slice, 3).to_a 
2

Votre problème est la ligne

ix=0, iy=0 

Il définit la valeur de ix à un tableau de deux fois 0 et iy à 0. Vous devez le remplacer par

ix, iy = 0, 0 
Questions connexes