2

我目前正在使用数组,我决定尝试通过使用 .include 替换和迭代搜索排序数组来加速我的一个函数?令我惊讶的是,该程序的总运行时间从 2:12 变为 9:53。对此感到困惑,我去查看 .include 的源代码?事实证明这只是用 C 编写的迭代检查

rb_ary_includes(VALUE ary, VALUE item)
{
        long i;

        for (i=0; i<RARRAY_LEN(ary); i++) {
                if (rb_equal(RARRAY_AREF(ary, i), item)) {
                        return Qtrue;
                }
        }
        return Qfalse;
}

有没有更快的方法来确定某个项目是否在排序数组中,也许是宝石?还是需要用您自己的二进制搜索方法编写困难的事情?

4

1 回答 1

1

我同意@mu,但是如果你真的想使用一个数组,并且使用的是 Ruby 2.0.0,你可能想看看这个bsearch方法。

arr = [1,2,3,5,6]
arr.bsearch { |x| 3 == x } # => 3
arr.bsearch { |x| 7 == x } # => nil

arr1 = ['1','2','3','4','5','6']
arr1.bsearch { |x| '2' == x } # => "2"
arr1.bsearch { |x| '7' == x } # => nil

http://www.ruby-doc.org/core-2.0/Array.html#method-i-bsearch

于 2013-05-22T19:23:22.917 回答