我知道Python的list
方法可以消耗發生器中的所有元素。有沒有像Ruby中可用的東西?如何從Ruby枚舉中獲取列表?
我知道的:
elements = []
enumerable.each {|i| elements << i}
我也知道inject
替代的。有一些現成的方法嗎?
我知道Python的list
方法可以消耗發生器中的所有元素。有沒有像Ruby中可用的東西?如何從Ruby枚舉中獲取列表?
我知道的:
elements = []
enumerable.each {|i| elements << i}
我也知道inject
替代的。有一些現成的方法嗎?
Enumerable#to_a
如果你想要做在你的枚舉,該#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輸出表示each
和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"]
沒有什麼會阻止我在'each '。 – Geo 2009-09-09 15:48:31
Geo:'each'和'collect'之間的區別在於'each'不返回一個數組,而'collect'的確如此。因此,如果在我的最後一個例子中用'each'代替'collect','elements'就是原始數字數組(即與enumerable相同),不是一個數字字符串數組(也就是說, 'collect')。 – 2009-09-09 18:45:48
我不是指你提到的情況。 'elements.each {| e |列表<< e.to_s}'做同樣的事情。我發現這只是個人品味問題,你正在使用哪種方法。 – Geo 2009-09-09 19:12:41
紅寶石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