在数组上,长度是预先计算的还是每次都通过迭代计算?
On an Array, length is pre-calculated or calculated everytime through iteration?
示例数据
arrayList = ['One', 'Two', 'Three', 'Four', 'Five']
arrayList.length is 5
当我执行 arrayList.length
时,幕后操作是什么?
- arrayList被迭代并返回长度
或
- 长度是在用于数组的数据结构中预先计算的
PS:我正在使用 JavaScript,但想了解跨各种语言的一般行为
说到JS,数组的长度存储为一个对象属性。所以它很容易获得。它不会在您每次 array.length
时遍历数组
N.B(应该是评论,但我对此缺乏声誉)
在Java脚本中,您可以更改数组的长度。但是 array.length
是一个属性。它不是每次都通过计算元素来“计算”的。
请注意,当您为数组的长度属性分配新值时,运行时系统会为您处理增大或缩小数组的问题。
I would like to know about an in general behavior across various languages.
不能一概而论:
某些语言允许您更改数组的大小;例如 Python、Ruby 等。这不一定通过分配给长度或大小属性来完成。
例如在Python中,数组(或列表)的长度不是属性。它是 len
函数返回的值。您可以通过添加和删除元素来更改 Python 数组大小。
在Ruby中,数组的长度是一个只读属性。
其他语言不允许更改原始数组的长度;例如Java、阿达等等
对于某些语言(C、BCPL),数组的长度不是其运行时值的一部分。 (实际上,在 BCPL 中,数组甚至不是一种类型。)所以这意味着应用程序无法访问数组的长度。它必须作为一个单独的变量来处理,或者通过(比如)零终止约定推导出来。 (后者意味着你通过迭代计算数组的名义长度,但你需要担心溢出。)
示例数据
arrayList = ['One', 'Two', 'Three', 'Four', 'Five']
arrayList.length is 5
当我执行 arrayList.length
时,幕后操作是什么?
- arrayList被迭代并返回长度
或
- 长度是在用于数组的数据结构中预先计算的
PS:我正在使用 JavaScript,但想了解跨各种语言的一般行为
说到JS,数组的长度存储为一个对象属性。所以它很容易获得。它不会在您每次 array.length
N.B(应该是评论,但我对此缺乏声誉)
在Java脚本中,您可以更改数组的长度。但是 array.length
是一个属性。它不是每次都通过计算元素来“计算”的。
请注意,当您为数组的长度属性分配新值时,运行时系统会为您处理增大或缩小数组的问题。
I would like to know about an in general behavior across various languages.
不能一概而论:
某些语言允许您更改数组的大小;例如 Python、Ruby 等。这不一定通过分配给长度或大小属性来完成。
例如在Python中,数组(或列表)的长度不是属性。它是
len
函数返回的值。您可以通过添加和删除元素来更改 Python 数组大小。在Ruby中,数组的长度是一个只读属性。
其他语言不允许更改原始数组的长度;例如Java、阿达等等
对于某些语言(C、BCPL),数组的长度不是其运行时值的一部分。 (实际上,在 BCPL 中,数组甚至不是一种类型。)所以这意味着应用程序无法访问数组的长度。它必须作为一个单独的变量来处理,或者通过(比如)零终止约定推导出来。 (后者意味着你通过迭代计算数组的名义长度,但你需要担心溢出。)