2 votes

Comment diviser un tableau à un niveau en plusieurs tableaux en Ruby 1.9.2

J'ai un tableau comme celui-ci :

[234, 235 , 343, 445]

Je veux le convertir pour qu'il ressemble à ceci

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

Y a-t-il une fonction de la bibliothèque centrale de ruby 1.9.2 qui pourrait m'aider à faire cela rapidement ? et si non, y a-t-il un moyen rapide ?


J'ai fait un petit test

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

5voto

Nicolas Viennot Points 1935

Je ne pense pas qu'il existe une fonction centrale pour faire cela, mais il existe un moyen rapide :

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

4voto

Telemachus Points 12013

Array#zip (sans argument) devrait également le faire, bien que la fonction map est probablement plus simple :

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

0voto

ennuikiller Points 28005

Dans la version 1.9.2, vous pouvez le faire :

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

0voto

AboutRuby Points 4675

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X