2013-11-29 35 views
-2

如果我创建一个包含10个元素的新数组,并用数字1到10填充它,然后调用delete_at(4),则第四个元素将被“删除”。delete_at(n)在Ruby中如何工作?

这是如何工作的?它是否完全删除元素和索引并将数组大小减小到9,或者是否将该索引的值取消(或使其为零),并将其推到数组的末尾?

+3

您可以1)阅读文档或2)尝试它。 (如果你问的是*实现*,而不是语义,请务必引出主题。) – user2864740

+0

我的意思是该方法的机制如何工作,而文档的单个句子没有解释这一点。 – IHazABone

+3

[文档(和示例)](http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-delete_at)解释了语义就好了。确保提出问题(也可以更新),以便他们专注于确切的问题/问题。 – user2864740

回答

0

它将位置后面的所有元素都复制到一个内存副本,然后将数组的大小减少一个。

你为什么问?你试图推断性能吗?

Ref:https://github.com/ruby/ruby/blob/9f45081627cf682b3ee938353da134d6f28560da/array.c#L2964

+0

我明白了。谢谢回答;该文档的一句话并没有完全削减它。 – IHazABone

+3

该文档有一个很好的例子,伴随着一句话。回顾一下这个例子,如果需要的话在IRB中使用它,会立即显示它是如何工作的,一个nil元素不会被添加到数组的末尾。除此之外,挖掘源代码将详细展示该方法的机制。 –