可能重复: 阵列,有什么意义?
我以前试过在数组和列表之间有什么区别?上问这个问题,但我的问题在得出结论性答案(更多关于这一点)之前已经结束了。
我试图理解计算机科学中“数组”这个词的真正含义。我试图达成一个答案,而不是根据这个网站的精神进行讨论。我要问的是语言不可知论,但您可以借鉴数组在您使用过的各种语言中的用途。
思考这个问题的方式:
可能没有一个精确定义数组是什么,如果是这样,那么是否有任何标准或接近标准的假设或数组是什么?至少有公共区域吗?也许有几个定义,如果是这样的话,我在寻找每个定义中最精确的定义。
语言示例:
(如果我错了,请纠正我)。
$eg = array('a', 'b', 'c')和unset($eg[1]),您仍然使用$eg[2]检索'c',直到现在$eg[1]还没有定义。(您可以调用array_values()重新索引数组)。您还可以混合字符串和整数键。在这个阶段,怀疑C数组是这里唯一的真正数组,严格地说,数组是数组,它必须具备我在第一个要点中提到的所有特征。如果是这样的话--这也是我想要确认或拒绝的-- JS和Ruby中的数组实际上是向量,PHP数组可能是某种类型的表。
最后注意:我已经制作了这个社区wiki,所以如果答案需要编辑几次来代替评论,那就去做吧。在此达成共识是必要的。
发布于 2009-10-15 04:10:56
数组_əˈrā_x
名词
1令人印象深刻的某一特定类型事物的展示或范围:有大量关于这个主题的文献,这是一系列令人困惑的选择。
2有序安排,特别是
诗意的、文学的、精致的或美丽的衣服:他穿着精美的衣服。动词
发布于 2009-10-15 04:11:15
它是或应该是关于抽象的。
其实有一个很好的问题隐藏在里面,一个非常好的问题,它带来了一个语言的宠儿,我已经有很长时间了。
情况越来越糟,而不是更好。
好的:有一件低级和被广泛不尊重的Fortran是正确的,我最喜欢的语言如Ruby仍然出错:它们对函数调用、数组和属性使用不同的语法。这到底有多抽象?在fortran中,function(1)具有与array(1)相同的语法,因此您可以在不更改程序的情况下将其中一个更改为另一个。(我知道,不是外派,对Fortran来说,这可能是愚蠢的打孔卡片字符集的意外,而不是故意的。)
关键是,我真的不确定x.y、x[y]和x(y)是否应该有不同的语法。将特定的抽象附加到特定的语法有什么好处?为从事重构转换的IDE程序员提供更多的工作?
尽管如此,定义array还是很容易的。在其第一个范式中,它是一个连续的元素序列,内存中的元素通过一个数字偏移量访问,并使用特定于语言的语法。在更高的范式中,它是对象的一个属性,它响应一个典型的数字消息。
发布于 2009-10-15 04:40:14
如果忽略编程语言如何建模数组和列表,忽略抽象的实现细节(以及随后的性能特征),那么数组和列表的概念就难以区分。
如果您介绍实现细节(仍然独立于编程语言),您可以比较数据结构,如链接列表、数组列表、常规数组、稀疏数组等等。但是,您不再比较数组和列表本身。
在我看来,您只能在编程语言的上下文中讨论数组和列表之间的区别。当然,您将讨论由该语言支持的数组和列表。你不能推广到任何其他语言。
简而言之,我认为这个问题是基于一个错误的前提,没有任何有用的答案。
编辑:回应奥利的评论:
我并不是说使用“数组”和“列表”两个词是没有用的。我想说的是,这些词没有而且不可能有明确的定义.但在特定编程语言的上下文中除外。虽然你希望这两个词有不同的意思,但事实是它们没有,只是看看这些词的实际用法。此外,试图将一套新的定义强加于世界是注定要失败的。
关于实现,我的观点是,当我们比较和对比数组和列表的不同实现时,我们就是这样做的。我不是说这不是一件有用的事。我的意思是,当我们比较和对比不同的实现时,我们不应该因为我们是调用数组、列表或其他什么东西而绞尽脑汁。我们应该使用我们能达成一致的条款.或者根本不使用术语。
对我来说,“数组”意味着“可能高效可索引的事物的有序集合”,而"list“则意味着”可有效索引的事物的有序集合“。但是,有两个数组和列表的例子与趋势相反;例如,一方面是PHP数组,另一方面是Java ArrayLists。所以如果我想准确的话..。在与语言无关的上下文中,我必须讨论“C类数组”或“链接列表”或其他一些术语,这些术语明确了我真正指的是什么数据结构。如果我想说清楚的话,“数组”和“列表”这两个术语就没用了。
https://stackoverflow.com/questions/1570215
复制相似问题