【发布时间】:2010-10-22 03:50:28
【问题描述】:
我有一个看起来像这样的循环
def slow_loop(array)
array.each_with_index do |item, i|
next_item = array[i+1]
if next_item && item.attribute == next_item.attribute
do_something_with(next_item)
end
end
end
除了改变 do_something_with 的调用方式,我怎样才能让它表现得更好?
谢谢,
-C
附言
由于这是一个'O(n)'操作,显然这里没有性能可取,所以我选择的答案是使用已经封装了该操作的ruby方法的答案。谢谢大家的帮助
【问题讨论】:
-
也许您应该让我们知道您有多少元素以及您想出的任何类型的基准数据?这应该是一个 O(n) 操作。
-
如果这听起来很愚蠢,请原谅我,但是,什么是 O(n) 操作?
-
基本上,操作O的时间与元素个数n直接相关
-
值得注意的是,仅仅因为它是一个 O(n) 算法并不意味着您不能从中获得更多性能。很多时候,最好的算法是 O(n),但你仍然可以用病态的 O(n) 算法打自己的脚。例如,在存储行优先时迭代矩阵列优先。在您的情况下,这是一个非常简单的算法,并且没有太大的改进空间。但请记住,即使您应该首先检查算法的复杂性,但获得最佳性能通常与较大的常数因素有关。
标签: ruby arrays refactoring