2010-08-21 9 views
2

J'ai un tableau comme celui-ci:Comment diviser un tableau de niveau à de nombreux tableaux dans Ruby 1.9.2

[234, 235, 343, 445]

Je veux convertir pour ressembler à ce

[[234], [235], [343], [445]]

y at-il la bibliothèque centrale f onction dans ruby ​​1.9.2 pourrait m'aider à le faire rapidement? et si non, y a-t-il un moyen rapide?


J'ai fait un petit essais

def test1 
    array = [] 
    10000000.times do 
    array << rand(1000000) 
    end 
    time = Time.now 
    array.permutation(1).to_a 
    puts "test1 (permutation) ---> Time = #{Time.now - time}" 
end 

def test2 
    array = [] 
    10000000.times do 
    array << rand(1000000) 
    end 
    time = Time.now 
    array.zip() 
    puts "test2 (zip)---> Time = #{Time.now - time}" 
end 

def test3 
    array = [] 
    10000000.times do 
    array << rand(1000000) 
    end 
    time = Time.now 
    array.map { |a| [a] } 
    puts "test3 (map) ---> Time = #{Time.now - time}" 
end 

test1 #test1 (permutation) ---> Time = 2.235128 
test2 #test2 (zip)   ---> Time = 1.537088 
test3 #test3 (map)   ---> Time = 2.230127 

Répondre

4

Array#zip (sans arguments) devrait le faire aussi, bien que le map soit probablement plus simple:

telemachus $ irb 
>> new = [234, 235 , 343, 445].zip() # The() is optional, .zip would work fine 
=> [[234], [235], [343], [445]] 
+0

Merci beaucoup à tous pour vos réponses, "zib" est le moyen le plus rapide ici – Amer

5

Je ne pense pas qu'il existe une fonction de base pour le faire, mais il est un moyen rapide:

irb(main):001:0> [234, 235 , 343, 445].map { |a| [a] } 
=> [[234], [235], [343], [445]] 
0

En 1.9.2 vous pouvez faire:

[234, 235 , 343, 445].permutation(1).to_a 
0

Je ne pense pas que vous allez obtenir tout ce que rapide avec cette tâche. Comme votre référence le suggère, le zip est la méthode la plus rapide (que vous avez testé au moins). Cependant, cela doit encore créer une quantité massive d'objets Array, et cela va prendre du temps. Si vous avez besoin de cela pour aller plus vite, vous devriez peut-être voir comment les données sont utilisées. Sans plus d'informations à ce sujet, tout ce que j'ai à dire est: Pourquoi a-t-il besoin d'un tableau dans ce format?

Questions connexes