Ruby数组是什么数据结构?

时间:2014-10-07 15:48:01

标签: ruby arrays

我正在学习计算机科学课程中的数组和链接列表。我的教授说,Arrays不能在末尾添加或删除元素,所以我们使用链表。

我知道Python,Ruby和JavaScript中Arrays的实现都允许我根据需要修改数组长度。这些语言是否真的实现了链表或其他数据结构并将其称为数组?

引擎盖下发生了什么?如果它不是一个真正的数组,为什么他们称之为一个?

2 个答案:

答案 0 :(得分:7)

如果数组已满,则固定大小的数组不能将元素添加到末尾,但删除元素很好。这就是堆栈的工作原理。

内部Ruby数组被分配为固定大小的C样式数组,并在添加元素时自动调整大小。作为优化,它们通常会重新调整大小,以避免在每次添加时重新分配。

链表是一种不同的数据结构,允许更灵活的插入和删除,但遍历速度慢得多,并且不允许轻松随机访问,这对于数组结构非常重要。

答案 1 :(得分:4)

https://github.com/ruby/ruby/blob/trunk/array.c

快速浏览一下Ruby Array实现的源代码,它是一个C数组,只是一块内存。但正如您在代码中看到的那样,它还提供了通过更新此内存块或在需要时重新分配来添加和删除的功能,使您可以方便地修改Ruby数组,就像它的动态一样。