ruby数组是如何在内部实现的(主要是在cruby中实现的,但欢迎提供其他信息)?
它们是像C++向量一样可生长的数组,还是基于列表?移位/取消移位和按索引访问元素的复杂性是什么?

最佳答案

它们是“在末端生长”的可生长阵列。
shiftO(1)unshiftO(n),通过索引访问是O(1)。据我所知,这对所有ruby实现都是正确的,但在mri中肯定是正确的。
更新:在最初编写这个答案之后,ruby被enhanced使unshift摊销O(1)。增强阵列在Ruby 2.0.0及以后,使shiftunshiftpushpop全部O(1)或摊销O(1)

07-27 13:46