【发布时间】:2010-12-06 21:55:04
【问题描述】:
我之前曾尝试在What is the difference between an array and a list? 中问过这个问题,但我的问题在得到结论性答案之前就被关闭了 (more about that)。
我试图理解计算机科学中“数组”一词的真正含义。我正在尝试根据本网站的精神得出一个没有讨论的答案。我要问的是语言不可知论,但您可以利用您对数组在您使用的各种语言中的作用/作用的了解。
思考这个问题的方式:
- 假设您正在设计一种新的编程语言并决定在其中实现数组;这意味着他们做什么?这些东西的属性和能力是什么。如果取决于语言类型,那又如何?
- 是什么让数组成为数组?
- 什么时候数组不是数组?例如,什么时候是列表、向量、表格、地图或集合?
对于什么是数组可能没有一个精确的定义,如果是这样,那么是否有任何标准或接近标准的假设或数组是什么?至少有公共区域吗?也许有几个定义,如果是这样的话,我正在寻找每个定义中最精确的。
语言示例:
(如果我在这些方面有误,请纠正我)。
- C 数组是单一类型的连续内存块,可以使用指针算术遍历或在特定偏移点访问。它们具有固定的大小。
- JavaScript、Ruby 和 PHP 中的数组具有可变大小,可以存储任何类型的对象/标量,它们也可以增长或从中删除元素。
- PHP 数组有两种类型:数值型和关联型。关联数组具有使用字符串键存储和检索的元素。数值数组具有使用整数存储和检索的元素。有趣的是,如果你有:
$eg = array('a', 'b', 'c')和unset($eg[1]),你仍然使用$eg[2]检索'c',只是现在$eg[1]是未定义的。 (您可以调用array_values()重新索引数组)。您还可以混合使用字符串和整数键。
在这个阶段,有点怀疑 C 数组是这里唯一真正的数组,严格来说,一个数组要成为一个数组,它必须具有我在第一个要点中提到的所有特征。如果是这样的话——这也是我希望确认或拒绝的怀疑——JS 和 Ruby 中的数组实际上是向量,而 PHP 数组可能是某种表。
最后说明:我已经创建了这个社区 wiki,因此如果需要对答案进行多次编辑以代替 cmets,请继续执行此操作。在这里达成共识。
【问题讨论】:
-
PHP 数组实际上是其他语言中的列表和数组的组合。所以这里最好不要提。 - 可能会引起混乱。
-
人类语言几乎从来都不是正式语言。当你试图找到“实际”或“真实”的定义时,你是在找错树。空无一人。我们所拥有的只是传统和共识,而共识经常在边缘破裂。就 C、Javascript、Ruby 和 PHP 是形式语言而言,它们可以定义数组在语言上下文中的含义,但这些定义没有义务集中在一个通用模型上,它们都是 '语言上下文中的“真实”和“真实”。
-
@Nicholas Knight - 只要你能得到足够多的人同意你的观点……共识是这里的关键。
-
@Nicholas:正确。定义仅在特定概念框架的上下文中是“正确的”或“错误的”。如果您选择以一种“可以”的奇怪方式定义您的术语,只要您在逻辑上保持一致即可。只是不要指望其他人会理解你......甚至懒得去尝试:-)
-
关闭这些东西到底有什么意义?你只是喜欢破坏人们的日子。那个“重复”是一个完全不同的问题!
标签: arrays terminology definitions