Какой алгоритм включает Array #?использует? - PullRequest
0 голосов
/ 27 января 2012

Для ruby, где x - массив, как x.include?(y) проверяет, находится ли y в x? Какой алгоритм?

Ответы [ 2 ]

6 голосов
/ 27 января 2012

В дополнение к ответу Грега Хьюгилла, исходный код Ruby 1.9.3 для этого метода:

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

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

Таким образом, как сказал Грег, алгоритм представляет собой просто линейный поиск по массиву.

3 голосов
/ 27 января 2012

Поскольку массив не нужно сортировать, алгоритм не может быть лучше, чем «посмотреть на каждый элемент и посмотреть, соответствует ли он».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...