我想遍歷數組的一部分。例如,我嘗試打印每個元素除了第一個:ruby - 懶惰地遍歷數組
array[1..-1].each {|e| puts e}
但array[1..-1]
構建一個新的Array
。如果array
非常龐大,這很浪費。另一個直截了當的方法:
(1...array.size).each { |i| puts array[i] }
它的工作原理。但我想知道是否有一些更優雅的技巧。
我想遍歷數組的一部分。例如,我嘗試打印每個元素除了第一個:ruby - 懶惰地遍歷數組
array[1..-1].each {|e| puts e}
但array[1..-1]
構建一個新的Array
。如果array
非常龐大,這很浪費。另一個直截了當的方法:
(1...array.size).each { |i| puts array[i] }
它的工作原理。但我想知道是否有一些更優雅的技巧。
的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 }
array.each_with_index {|x, i| puts x unless i.eql?0}
'puts x除非i.zero?'heh :) – fl00r
@ fl00r是啊:)有充足的方法來比較。 – kiddorails