我对each.with_index
和each_with_index
之间的区别感到困惑。它们有不同的类型,但在实践中似乎完全相同。
答案 0 :(得分:143)
with_index
方法使用可选参数来偏移起始索引。 each_with_index
执行相同的操作,但没有可选的起始索引。
例如:
[:foo, :bar, :baz].each.with_index(2) do |value, index|
puts "#{index}: #{value}"
end
[:foo, :bar, :baz].each_with_index do |value, index|
puts "#{index}: #{value}"
end
输出:
2: foo
3: bar
4: baz
0: foo
1: bar
2: baz
答案 1 :(得分:38)
each_with_index
引入Ruby。 with_index
稍后介绍:
0
以外的数字开始。今天,从普遍性和可读性的角度来看,使用with_index
会更好,但从加速代码的角度来看,each_with_index
的运行速度比each.with_index
略快
当您认为通过简单链接几种方法可以很容易地表达单个方法时,通常情况下单个方法比链更快。至于另一个例子,reverse_each
的运行速度比reverse.each
快。这些方法有理由存在。