我想通过一个阵列的一部分进行迭代。 例如,我尝试打印的每一个元素,除了第一种:
array[1..-1].each {|e| puts e}
但array[1..-1]
建立一个新的Array
。 这是浪费,如果array
是非常巨大的。 另一种简单的方法:
(1...array.size).each { |i| puts array[i] }
有用。 但我不知道是否有一些更优雅的技巧。
我想通过一个阵列的一部分进行迭代。 例如,我尝试打印的每一个元素,除了第一种:
array[1..-1].each {|e| puts e}
但array[1..-1]
建立一个新的Array
。 这是浪费,如果array
是非常巨大的。 另一种简单的方法:
(1...array.size).each { |i| puts array[i] }
有用。 但我不知道是否有一些更优雅的技巧。
红宝石2.0将推出懒惰可枚举 (好消息!),现在我们可以热身使用像宝石引擎枚举懒 :
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 }
xs.lazy_slice(1..-1).each { |x| puts x }
array.each_with_index {|x, i| puts x unless i.eql?0}