可能重复:
数组,有什么意义?
我之前尝试在数组和列表之间有什么区别?但是我的问题在得出结论性答案之前就已经结束了(更多关于那个)。
我试图理解计算机科学中“数组”这个词的真正含义。我正在尝试根据本网站的精神得出一个没有讨论的答案。我要问的是语言不可知论,但您可以利用您对数组在您使用的各种语言中的作用/作用的了解。
思考这个问题的方法:
- 想象一下,您正在设计一种新的编程语言,并决定在其中实现数组;这意味着他们做什么?这些东西的属性和能力是什么。如果它取决于语言的类型,那又如何呢?
- 是什么使数组成为数组?
- 什么时候数组不是数组?例如,何时是列表、向量、表格、地图或集合?
数组是什么可能没有一个精确的定义,如果是这种情况,那么是否有任何标准或接近标准的假设或数组是什么?至少有公共区域吗?也许有几个定义,如果是这种情况,我正在寻找每个定义中最精确的。
语言示例:
(如果我对其中任何一个有误,请纠正我)。
- C 数组是单一类型的连续内存块,可以使用指针算术遍历或在特定偏移点访问。他们有一个固定的大小。
- JavaScript、Ruby 和 PHP 中的数组具有可变大小,可以存储任何类型的对象/标量,它们也可以增长或从中删除元素。
- PHP 数组有两种类型:数值型和关联型。关联数组具有使用字符串键存储和检索的元素。数值数组具有使用整数存储和检索的元素。有趣的是,如果你有:
$eg = array('a', 'b', 'c')
并且你仍然用unset($eg[1])
检索,只是现在是未定义的。(您可以调用以重新索引数组)。您还可以混合使用字符串和整数键。'c'
$eg[2]
$eg[1]
array_values()
在这个阶段,有点怀疑 C 数组是这里唯一真正的数组,严格来说,一个数组要成为一个数组,它必须具有我在第一个要点中提到的所有特征。如果是这样的话——这些都是我希望确认或拒绝的怀疑——JS 和 Ruby 中的数组实际上是向量,而 PHP 数组可能是某种表。
最后说明:我已经创建了这个社区 wiki,所以如果需要对答案进行多次编辑以代替评论,请继续这样做。共识在这里是有序的。