gpt4 book ai didi

ruby - ruby 中 Array#uniq 方法的时间复杂度是多少?

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:09 26 4
gpt4 key购买 nike

谁能告诉我 ruby​​ 内部使用哪种算法来使用 Array#uniq 方法从 ruby​​ 数组中删除重复项?

最佳答案

来自docs :

static VALUE
rb_ary_uniq(VALUE ary)
{
VALUE hash, uniq, v;
long i;

if (RARRAY_LEN(ary) <= 1)
return rb_ary_dup(ary);
if (rb_block_given_p()) {
hash = ary_make_hash_by(ary);
uniq = ary_new(rb_obj_class(ary), RHASH_SIZE(hash));
st_foreach(RHASH_TBL(hash), push_value, uniq);
}
else {
hash = ary_make_hash(ary);
uniq = ary_new(rb_obj_class(ary), RHASH_SIZE(hash));
for (i=0; i<RARRAY_LEN(ary); i++) {
st_data_t vv = (st_data_t)(v = rb_ary_elt(ary, i));
if (st_delete(RHASH_TBL(hash), &vv, 0)) {
rb_ary_push(uniq, v);
}
}
}
ary_recycle_hash(hash);

return uniq;

它有O(N)复杂度

关于ruby - ruby 中 Array#uniq 方法的时间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14200540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com