我想迭代数组的一部分。例如,我尝试打印除第一个元素之外的每个元素:
array[1..-1].each {|e| puts e}
But array[1..-1]
建立一个新的Array
。如果array
非常巨大。另一种简单的方法:
(1...array.size).each { |i| puts array[i] }
有用。但我想知道是否有一些更优雅的技巧。
Ruby 2.0 即将发布惰性枚举 http://bugs.ruby-lang.org/issues/4890(好消息!),现在我们可以使用宝石来预热引擎,例如可枚举惰性 https://github.com/yhara/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 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)