Ruby中each.with_index和each_with_index之间的区别?

时间:2013-11-28 05:02:13

标签: ruby

我对each.with_indexeach_with_index之间的区别感到困惑。它们有不同的类型,但在实践中似乎完全相同。

2 个答案:

答案 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稍后介绍:

  1. 允许更广泛地使用各种调查员。
  2. 允许索引从0以外的数字开始。
  3. 今天,从普遍性和可读性的角度来看,使用with_index会更好,但从加速代码的角度来看,each_with_index的运行速度比each.with_index略快

    当您认为通过简单链接几种方法可以很容易地表达单个方法时,通常情况下单个方法比链更快。至于另一个例子,reverse_each的运行速度比reverse.each快。这些方法有理由存在。