【问题标题】:Array length checking speed数组长度检查速度
【发布时间】:2014-12-27 16:17:53
【问题描述】:

我不在我的电脑旁,否则我会尝试一下:

假设我们有一个任意长度的数组(比如 5),每个索引按升序存储从 1 到 5 的数字(即 int[0] = 1 等)。

然后假设我们从用户那里获取一个输入,一个可变长度的数组,存储可变整数。我想验证这两个数组是否相同。

对我来说是不是更快,初步检查这些数组的长度是否相同,然后检查实际值是否相同,或者设置一些迭代循环系统来遍历两个数组并验证它们是否'是一样的吗?数组长度只是实际结构中的一些存储变量吗?我的意思是,速度差异会很小,我只是想知道。目前使用 javascript。

但我的一般想法是,如果数组长度是一个变量,那么最好先访问它并进行比较,如果不是更好地迭代作为 array.length 操作仍然会迭代数组以计数数字?

如果我随身携带文档就好了。

【问题讨论】:

  • 为了遍历 both 数组,您需要知道它们的长度中的较小者(否则迭代何时停止?),因此您可以也可以利用这个机会比较它们的长度。
  • 您可以验证字符串是否相同:array1.join()===array2.join()
  • 当然要提前查好长度。您认为这样做可能不会更有效,或者不会降低效率,而不是在突然注意到一个数组更短之前检查 1000 个元素?
  • 我认为长度存储在一个变量中。否则检查长度将是一项非常昂贵的操作。

标签: javascript arrays performance


【解决方案1】:

让我澄清一下我的评论:假设由于某种原因您想要在不检查它们的长度的情况下进行比较。好的,这意味着我们需要遍历元素并检查它们是否相等,听起来很简单吧?这就是它的样子(为了清楚起见,这里使用 Python,但这主要与语言无关):

def equal(arrayA, arrayB):
    for i in range(0, ???):
       if arrayA[i] != arrayB[i]:
           return False
    return True

但这里有个问题,迭代什么时候停止? (??? 部分中有什么内容?)嗯,你必须在元素用完之前停下来,而当你到达 min(len(arrayA), len(arrayB)) 时就会发生这种情况。

唉,一个典型的min 函数会这样实现:

def min(x, y):
    if x < y:
        return x
    else:
        return y

这意味着您需要进行比较&lt;。好吧,如果您必须进行比较,您也可以对长度进行相等比较,因为这在大多数架构上的成本大致相同。

所以结论是:你不能避免对数组的长度进行比较,所以你不妨利用这个机会检查它们是否相等。

【讨论】:

  • 这是蟒蛇吗?如果是这样,请在您的答案中指定它,以免混淆任何人(因为该问题被标记为 JavaScript)
  • 这最初是一个与语言无关的问题,但我会提一下。
  • 抱歉,我不确定是否最初将其标记为 javascript。好吧,我会读 python。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 2021-11-20
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
相关资源
最近更新 更多