2009-09-08 5 views
3

Je connais la méthode list de Python qui peut consommer tous les éléments d'un générateur. Est-ce qu'il y a quelque chose comme ça dans Ruby?Comment puis-je obtenir une liste d'un Ruby énumérable?

Je sais de:

elements = [] 
enumerable.each {|i| elements << i} 

Je connais aussi l'alternative inject. Y a-t-il une méthode disponible prête?

Répondre

9

Enumerable#to_a

+0

Ruby 2.0 introduisons 'recenseur :: Lazy' qui a' # to_a' et '# force' (dans le même but) . Vous pouvez lire plus ici [Ruby 2.0 Enumerable :: Lazy] (http://railsware.com/blog/2012/03/13/ruby-2-0-enumerablelazy/) – gregolsen

3

Si vous voulez faire une transformation sur tous les éléments de votre dénombrable, la méthode #collect (alias #map) serait utile:

elements = enumerable.collect { |item| item.to_s } 

Dans cet exemple, elements sera contenir tous les éléments qui sont dans enumerable, mais avec chacun d'eux traduit en une chaîne. Par exemple.

enumerable = [1, 2, 3] 
elements = enumerable.collect { |number| number.to_s } 

Dans ce cas, elements serait ['1', '2', '3'].

Voici quelques sortie illustrant irb la différence entre each et collect:

irb(main):001:0> enumerable = [1, 2, 3] 
=> [1, 2, 3] 
irb(main):002:0> elements = enumerable.each { |number| number.to_s } 
=> [1, 2, 3] 
irb(main):003:0> elements 
=> [1, 2, 3] 
irb(main):004:0> elements = enumerable.collect { |number| number.to_s } 
=> ["1", "2", "3"] 
irb(main):005:0> elements 
=> ["1", "2", "3"] 
+0

Rien ne m'empêcherait de le faire dans 'chaque '. – Geo

+0

Geo: la différence entre 'each' et' collect' est que 'each' ne renvoie pas de tableau, alors que' collect' le fait. Par conséquent, si vous avez substitué 'each' par' collect' dans mon dernier exemple, 'elements' serait le tableau de nombres original (ie identique à' enumerable'), _not_ un tableau de chaînes numériques (ie ce que vous obtiendriez en utilisant 'collecter'). –

+0

Je ne parlais pas du cas que vous avez mentionné. 'elements.each {| e | liste << e.to_s} 'fait la même chose. Je trouve que c'est juste une question de goût personnel, la méthode que vous utilisez. – Geo

Questions connexes