2012-06-02 41 views
3

我想遍歷數組的一部分。例如,我嘗試打印每個元素除了第一個:ruby​​ - 懶惰地遍歷數組

array[1..-1].each {|e| puts e} 

array[1..-1]構建一個新的Array。如果array非常龐大,這很浪費。另一個直截了當的方法:

(1...array.size).each { |i| puts array[i] } 

它的工作原理。但我想知道是否有一些更優雅的技巧。

回答

5

的Ruby 2.0將推出Lazy enumerables(好消息!),現在我們可以熱身用的寶石引擎喜歡enumerable-lazy

require 'enumerable/lazy' 
xs.lazy.drop(1).each { |x| puts x } 

這不是壞事,但在概念上它並不完全適用你的情況,因爲你已經有一個數組,而不是一個懶惰的對象(鏈表),你必須通過丟棄元素(好吧,我們只是丟棄一個元素,這不會成爲一個破壞行爲)。因此,如果您計劃大量使用它,您可以將您的解決方案(使用範圍的解決方案)抽象爲Enumerable#each_from(start_index)

更多:你還可以創建一個擴展枚舉懶Array#lazy_slice(range),這將返回一個Enumerable#lazy對象。它也看起來不錯:xs.lazy_slice(1..-1).each { |x| puts x }

1
array.each_with_index {|x, i| puts x unless i.eql?0} 
+2

'puts x除非i.zero?'heh :) – fl00r

+0

@ fl00r是啊:)有充足的方法來比較。 – kiddorails