ruby - 懒洋洋地遍历一个数组

Lai*_*uan 3 ruby iteration foreach

我想迭代一个数组的一部分.例如,我尝试打印除第一个元素之外的所有元素:

array[1..-1].each {|e| puts e}
Run Code Online (Sandbox Code Playgroud)

array[1..-1]建立一个新的Array.如果array非常巨大,这是浪费.另一种直截了当的方法:

(1...array.size).each { |i| puts array[i] }
Run Code Online (Sandbox Code Playgroud)

有用.但我想知道是否有一些更优雅的技巧.

tok*_*and 5

Ruby 2.0将发布Lazy enumerables(非常棒的新闻!),现在我们可以使用像enumerable-lazy这样的宝石来预热引擎:

require 'enumerable/lazy'
xs.lazy.drop(1).each { |x| puts x }
Run Code Online (Sandbox Code Playgroud)

这还不错,但从概念上讲它并不完全适用于你的情况,因为你已经有了一个数组,而不是一个懒惰的对象(一个链表)你必须遍历丢弃元素(好吧,我们只是丢弃一个元素,它不会是一个交易破坏者).因此,您可以抽象出您的解决方案(使用范围的解决方案),就Enumerable#each_from(start_index)好像您计划使用它一样.

更多:您还可以创建一个enumerable-lazy 的扩展Array#lazy_slice(range),它将返回一个Enumerable#lazy对象.它看起来也很不错:xs.lazy_slice(1..-1).each { |x| puts x }