ruby 数组内部是如何实现的(主要是在 CRuby 中,但欢迎任何其他信息)?
它们是像 C++ 向量一样可增长的数组还是基于列表的?移位/取消移位以及通过索引访问元素的复杂性是多少?
它们是可增长的数组,“在最后增长”。
shift
is O(1)
, unshift
is O(n)
通过索引访问是O(1)
。据我所知,这对于所有 ruby 实现都适用,但在 MRI 中确实如此。
更新:在这个答案最初写完后,Ruby 被enhanced https://github.com/ruby/ruby/commit/fdbd3716781817c840544796d04a7d41b856d9f4使unshift
摊销的O(1)
。增强后的数组位于红宝石2.0.0 https://bugs.ruby-lang.org/issues/6638后来,制作shift
, unshift
, push
, and pop
all O(1)
或摊销O(1)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)