【发布时间】:2020-06-09 15:58:45
【问题描述】:
有人可以提供一些证据,Ruby 是否每次调用 array.size、array.length 或 array.count 时都会重新计算数组大小?
提前致谢。
更新
为了让事情更清楚,recalculate 我的意思是,当我们每次调用array.size 时,Ruby 是否需要一次又一次地遍历整个数组来计算其元素的数量。
【问题讨论】:
-
不,Ruby 会跟踪数组大小。调用
array.size几乎没有开销。 -
@Stefan,这是有趣且有用的信息。哈希、集合、范围、字符串呢?那么从数组派生的枚举器呢,比如
[1,2,3].each? -
Marian13,您的问题有些模棱两可,因为不清楚您所说的“重新计算”是什么意思。有人可能会争辩说,每当调用方法或检索变量的值时,都会发生“计算”。我将您的问题解释为一个实际问题,例如,询问
n = arr1.size; arr2.select { |x| x < n }是否比arr2.select { |x| x < arr1.size }明显更有效,这是我对自己的疑惑。用@Stefan 的话来说,也许你在问“Ruby 是否会跟踪数组大小”? -
@Cary Swoveland,您正确地解释了我的问题。 “Ruby 是否跟踪数组大小?”正是我想知道的。我会更新我的问题以使事情更清楚。
-
我查过一次。您可以通过基准测试
size来轻松验证 10 元素和 1000 万元素数组 - 应该没有任何区别(但不要测量数组创建时间)