ruby数组是如何在内部实现的(主要是在cruby中实现的,但欢迎提供其他信息)?
它们是像C++向量一样可生长的数组,还是基于列表?移位/取消移位和按索引访问元素的复杂性是什么?
最佳答案
它们是“在末端生长”的可生长阵列。shift
是O(1)
,unshift
是O(n)
,通过索引访问是O(1)
。据我所知,这对所有ruby实现都是正确的,但在mri中肯定是正确的。
更新:在最初编写这个答案之后,ruby被enhanced使unshift
摊销O(1)
。增强阵列在Ruby 2.0.0及以后,使shift
、unshift
、push
和pop
全部O(1)
或摊销O(1)
。