我想遍历数组的一部分。例如,我尝试打印除第一个元素之外的所有元素:
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之类的 gem 来预热引擎:
require 'enumerable/lazy'
xs.lazy.drop(1).each { |x| puts x }
这还不错,但从概念上讲,它并不完全适用于您的情况,因为您已经有一个数组,而不是您必须遍历以丢弃元素的惰性对象(链表)(好吧,我们只是在这里丢弃一个元素,它不会破坏交易)。因此,您可以抽象出您的解决方案(使用范围的解决方案),就Enumerable#each_from(start_index)
好像您打算经常使用它一样。
更多:您还可以创建enumerable-lazy 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}