【发布时间】:2015-04-03 01:36:45
【问题描述】:
编写此代码的惯用 Ruby 方式是什么?
给定一个数组,我想遍历该数组的每个元素,但跳过第一个。我想在不分配新数组的情况下执行此操作。
这是我想出的两种方式,但都没有感觉特别优雅。
这可行,但似乎太冗长了:
arr.each_with_index do |elem, i|
next if i.zero? # skip the first
...
end
这可行,但分配了一个新数组:
arr[1..-1].each { ... }
编辑/澄清:我想避免分配第二个数组。最初我说我想避免“复制”数组,这令人困惑。
【问题讨论】:
-
你的第二个没有复制数组。
-
@sawa 它本身并不会复制数组,但它会根据
Array#[]上的文档创建一个包含除第一个元素之外的所有元素的新数组;我误解了要求吗? -
我同意你的评价。另外两个选项是仅使用索引:
(1...arr.size).each { |i| ....ref arr[i] ... }或标志:first = true; arr.each { |e| if first; first = false; next; end; ... }。 -
我编辑了问题以澄清我想避免分配新数组。这就是我写“不要复制”时的意思。
-
“复制”不是混淆术语。事实上,这是一个艺术术语。
标签: ruby arrays enumeration idioms