性能:迭代除元素之外的数组

use*_*052 3 ruby arrays indexing performance ruby-on-rails

我正在使用Ruby on Rails 3.0.7,我想迭代一个对象数组(类istances),除了id等于1(id引用array [ 1]索引)的元素.

我知道我可以在if语句"内部"使用一个each语句,然后检查每个"当前"\"考虑"元素if id == 1.但是,由于数组中填充了大量数据,我想找到另一种方法,以更高效的方式完成相同的事情(避免if每次运行).

我能怎么做?

Dig*_*oss 7

  1. 使程序工作
  2. 轮廓
  3. 优化

唐纳德克努特说:

我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源.

现在,您可以执行以下操作:

def f
  do_something
end

f 0
for i in 2..n
  f i
end
Run Code Online (Sandbox Code Playgroud)

甚至:

def f
  yield 0
  for i in 2..@n
    yield i
  end
end

f do |i|
  do_something
end
Run Code Online (Sandbox Code Playgroud)

但你可能不希望做任何类似的事情,如果你这样做,那只会在发现重要之后.

最后,假设这个丑陋的技巧实际上让你的服务器运行得更快一点.它值得吗?

  • +1,正是我要说的.`if id == 1`通常会非常高效.除非你发现实际的性能问题,否则不要冒汗,然后启动你的探查器. (2认同)