2009-09-08 61 views
3

我知道Python的list方法可以消耗發生器中的所有元素。有沒有像Ruby中可用的東西?如何從Ruby枚舉中獲取列表?

我知道的:

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

我也知道inject替代的。有一些現成的方法嗎?

回答

9

Enumerable#to_a

+0

紅寶石2.0介紹'枚舉:: Lazy'具有'#to_a'和'#force'(用於相同的目的) 。你可以在這裏閱讀更多[Ruby 2.0 Enumerable :: Lazy](http://railsware.com/blog/2012/03/13/ruby-2-0-enumerablelazy/) – gregolsen 2012-09-22 06:26:29

3

如果你想要做在你的枚舉,該#collect所有元素一些變換(又名#map)方法將是有益的:

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

在這個例子中,elements會包含enumerable中的所有元素,但每個元素都被轉換爲一個字符串。例如。

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

在這種情況下,elements['1', '2', '3']

下面是一些IRB輸出表示eachcollect之間的差:

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

沒有什麼會阻止我在'each '。 – Geo 2009-09-09 15:48:31

+0

Geo:'each'和'collect'之間的區別在於'each'不返回一個數組,而'collect'的確如此。因此,如果在我的最後一個例子中用'each'代替'collect','elements'就是原始數字數組(即與enumerable相同),不是一個數字字符串數組(也就是說, 'collect')。 – 2009-09-09 18:45:48

+0

我不是指你提到的情況。 'elements.each {| e |列表<< e.to_s}'做同樣的事情。我發現這只是個人品味問題,你正在使用哪種方法。 – Geo 2009-09-09 19:12:41