首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组的实际定义是什么?

问数组的实际定义是什么?
EN

Stack Overflow用户
提问于 2009-10-15 03:58:53
回答 7查看 2.5K关注 0票数 10

可能重复: 阵列,有什么意义?

我以前试过在数组和列表之间有什么区别?上问这个问题,但我的问题在得出结论性答案(更多关于这一点)之前已经结束了。

我试图理解计算机科学中“数组”这个词的真正含义。我试图达成一个答案,而不是根据这个网站的精神进行讨论。我要问的是语言不可知论,但您可以借鉴数组在您使用过的各种语言中的用途。

思考这个问题的方式:

  • 假设您正在设计一种新的编程语言,并决定在其中实现数组;这意味着它们会做什么?这些东西的性质和功能是什么。如果这取决于语言的类型,那又如何呢?
  • 什么使数组成为数组?
  • 什么时候数组不是数组?例如,当它是列表、向量、表、地图或集合时?

可能没有一个精确定义数组是什么,如果是这样,那么是否有任何标准或接近标准的假设或数组是什么?至少有公共区域吗?也许有几个定义,如果是这样的话,我在寻找每个定义中最精确的定义。

语言示例:

(如果我错了,请纠正我)。

  • C数组是单个类型的连续内存块,可以使用指针算法遍历,也可以在特定的偏移点访问。它们有固定的尺寸。
  • JavaScript、RubyandPHP中的数组具有可变的大小,可以存储任何类型的对象/标量,这些对象/标量也可以增长或从它们中删除元素。
  • PHP数组有两种类型:数值型和关联型。关联数组有用字符串键存储和检索的元素。数字数组有用整数存储和检索的元素。有趣的是,如果您有:$eg = array('a', 'b', 'c')和unset($eg[1]),您仍然使用$eg[2]检索'c',直到现在$eg[1]还没有定义。(您可以调用array_values()重新索引数组)。您还可以混合字符串和整数键。

在这个阶段,怀疑C数组是这里唯一的真正数组,严格地说,数组是数组,它必须具备我在第一个要点中提到的所有特征。如果是这样的话--这也是我想要确认或拒绝的-- JS和Ruby中的数组实际上是向量,PHP数组可能是某种类型的表。

最后注意:我已经制作了这个社区wiki,所以如果答案需要编辑几次来代替评论,那就去做吧。在此达成共识是必要的。

EN

回答 7

Stack Overflow用户

发布于 2009-10-15 04:10:56

数组_əˈrā_x

名词

1令人印象深刻的某一特定类型事物的展示或范围:有大量关于这个主题的文献,这是一系列令人困惑的选择。

2有序安排,特别是

  • 军队的安排。
    1. 数学:按行和列排列的数量或符号的排列;矩阵。
    2. Computing:一组相关元素的有序集合.
    3. 法律:一份陪审员名单。

​

诗意的、文学的、精致的或美丽的衣服:他穿着精美的衣服。动词

  1. 反式。以一种特殊的方式展示或安排(事物):摆在桌子对面的是一个自助餐,部队列队攻击他。
  2. 反式。给某人穿上(指定的衣服):他们穿着匈牙利的民族服装。
  3. 反式。(陪审团)起源于中古英语(在意义上,准备和准备中的位置):源自古法语的arei (名词),areer (动词),基于拉丁语ad-‘the’+a日耳曼语基,意思是“准备”。
票数 5
EN

Stack Overflow用户

发布于 2009-10-15 04:11:15

它是或应该是关于抽象的。

其实有一个很好的问题隐藏在里面,一个非常好的问题,它带来了一个语言的宠儿,我已经有很长时间了。

情况越来越糟,而不是更好。

好的:有一件低级和被广泛不尊重的Fortran是正确的,我最喜欢的语言如Ruby仍然出错:它们对函数调用、数组和属性使用不同的语法。这到底有多抽象?在fortran中,function(1)具有与array(1)相同的语法,因此您可以在不更改程序的情况下将其中一个更改为另一个。(我知道,不是外派,对Fortran来说,这可能是愚蠢的打孔卡片字符集的意外,而不是故意的。)

关键是,我真的不确定x.y、x[y]和x(y)是否应该有不同的语法。将特定的抽象附加到特定的语法有什么好处?为从事重构转换的IDE程序员提供更多的工作?

尽管如此,定义array还是很容易的。在其第一个范式中,它是一个连续的元素序列,内存中的元素通过一个数字偏移量访问,并使用特定于语言的语法。在更高的范式中,它是对象的一个属性,它响应一个典型的数字消息。

票数 5
EN

Stack Overflow用户

发布于 2009-10-15 04:40:14

如果忽略编程语言如何建模数组和列表,忽略抽象的实现细节(以及随后的性能特征),那么数组和列表的概念就难以区分。

如果您介绍实现细节(仍然独立于编程语言),您可以比较数据结构,如链接列表、数组列表、常规数组、稀疏数组等等。但是,您不再比较数组和列表本身。

在我看来,您只能在编程语言的上下文中讨论数组和列表之间的区别。当然,您将讨论由该语言支持的数组和列表。你不能推广到任何其他语言。

简而言之,我认为这个问题是基于一个错误的前提,没有任何有用的答案。

编辑:回应奥利的评论:

我并不是说使用“数组”和“列表”两个词是没有用的。我想说的是,这些词没有而且不可能有明确的定义.但在特定编程语言的上下文中除外。虽然你希望这两个词有不同的意思,但事实是它们没有,只是看看这些词的实际用法。此外,试图将一套新的定义强加于世界是注定要失败的。

关于实现,我的观点是,当我们比较和对比数组和列表的不同实现时,我们就是这样做的。我不是说这不是一件有用的事。我的意思是,当我们比较和对比不同的实现时,我们不应该因为我们是调用数组、列表或其他什么东西而绞尽脑汁。我们应该使用我们能达成一致的条款.或者根本不使用术语。

对我来说,“数组”意味着“可能高效可索引的事物的有序集合”,而"list“则意味着”可有效索引的事物的有序集合“。但是,有两个数组和列表的例子与趋势相反;例如,一方面是PHP数组,另一方面是Java ArrayLists。所以如果我想准确的话..。在与语言无关的上下文中,我必须讨论“C类数组”或“链接列表”或其他一些术语,这些术语明确了我真正指的是什么数据结构。如果我想说清楚的话,“数组”和“列表”这两个术语就没用了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1570215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档