为什么数组的索引都从0开始

一时兴起想学一学lua,但是被lua的table默认初始索引为1和用~=表示不等于折磨到了。这不仅令我思考了思考,数组的索引为什么要从0开始。
一方面,数组是一种线性结构,它有一段连续的内存空间,存储一组具有相同类型的数据。数组的下标从0开始可以使得下标与偏移量/偏移地址相对应,这更符合具有专业知识的程序员的直觉
另一方面,从设计理念的角度考虑,为了表示自然数1,2,3,4…14…的子序列,一般有四种序列的表示方法:
- 2 ≤ i < 13
- 1 < i ≤ 12
- 2 ≤ i ≤ 12
- 1 < i < 13
以上的几种表达方式里,有哪一种比其他的好吗?
显然,1和2有较为明显的优点:他们上下界数值之间的差值就是这个序列的长度。在任何一种表示中,两个子序列相邻,最好是其中一个的上界等于另外一个的下界。
接下来,假设序列里要包含最小的自然数,如果使用2和4这种方式,那下界就必须是个非自然数,这就不太好看了,所以这里更倾向于使用a和c的方式,即使用≤方式表示下界。这里如果使用≤表示上界,那一个空的子序列表示方式也将会很丑陋,所以对于上界,我们可能更喜欢使用1和4中的<方式,结合上一小段的分析,1方式最终获胜。
更进一步,当需要表示一个长度为N的序列时,如果想通过下标来区分其中的元素,那又来了一个棘手的问题:初始元素的下标值应该用多少呢,如果从1开始,那范围变成1 ≤ i < N+1,如果从0开始,那范围会是0 ≤ i < N,显然后一种方式更优雅更直观,我们很难不更倾向于一个序列的表示最好从0开始。
Python的创造者在考虑Python列表的范围表达的时候,觉得使用左闭右开的方式更优雅,他思考过,在处理长度为N的序列时,到底第一个元素的下标使用0更合适还是使用1更合适?他的出发点很简单,那就是哪种方式更优雅。首先确定使用左闭右开的方式,当下标从1开始时,下标范围为1 <= i < n+1,当下标为从0开始时,下标范围为 0<= i < n,显然后面这种方式更加优雅,所以他倾向于使用0作为第一个元素的下标。
- Title: 为什么数组的索引都从0开始
- Author: 7erry
- Created at : 2023-07-04 21:48:09
- Updated at : 2023-07-04 21:48:09
- Link: http://7erry.com/2023/07/04/为什么数组的索引都从0开始/
- License: This work is licensed under CC BY-NC 4.0.