3

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

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

而是array[1..-1]构建一个新的Array. 如果array非常大,那就太浪费了。另一种直接的方法:

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

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

4

2 回答 2

5

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 }

于 2012-06-02T19:43:46.327 回答
1
array.each_with_index {|x, i| puts x unless i.eql?0}
于 2012-06-02T19:23:05.330 回答