红宝石阵列内部

Kar*_*ath 12 ruby arrays

如何在内部实现ruby数组(主要在CRuby中,但欢迎任何其他信息)?

它们是可扩展的数组,如c ++向量还是基于列表?shift/unshift和按索引访问元素的复杂性是什么?

sep*_*p2k 16

它们是可生长的阵列,"最终成长".

shiftO(1),unshiftO(n)和索引访问是O(1).据我所知,这适用于所有ruby实现,但它绝对适用于MRI.

更新:在最初编写此答案之后,Ruby已得到增强以进行unshift摊销O(1).增强阵列在红宝石2.0.0和以后,使得shift,unshift,push,和pop所有O(1)或摊销O(1).

  • 我不确定换班总是O(N).如果我没记错的话,会分别跟踪内存块的开头和第一项的索引,因此可以通过递增firstItem索引来进行O(1)移位.如果你没有做过任何轮班,那么Unshift只有O(N). (2认同)