首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消除数组=循环思维

消除数组=循环思维
EN

Software Engineering用户
提问于 2015-11-17 17:39:00
回答 1查看 194关注 0票数 -1

我注意到代码评审中的一个常见问题,即采用以下形式:

代码语言:javascript
复制
// "arr" is an array
for (i = 0; i < arr.length; ++i) {
    if (i == 3) {
        // do something with arr[i]
    }
    if (i == 8) {
        // do something else with arr[i]
    }
}

我称之为“数组=循环”心态。不知怎么的,他们脑子里有这样的想法:如果你想使用数组,就必须使用循环。我想知道这种心态的根源是什么..。这与教育有关吗?他们缺少什么概念?这怎么可能不教呢?

EN

回答 1

Software Engineering用户

发布于 2015-11-17 23:03:12

你的问题标题和问题中的代码不匹配。

标题中你的问题的答案是:你还能如何找到价值呢?除非您对数组的结构有一些额外的了解,否则迭代它是找到值的唯一方法。如果您确实知道一些额外的东西,例如数组是排序的,那么您可以做一些更有效的事情,例如二进制搜索。但在最坏的情况下,你需要迭代整个数组,在平均情况下,超过数组的一半。

现在,关于您发布的代码:这段代码并不试图找到一个值。它不是想找到任何东西,真的。它已经知道了它想要处理的索引,根本不需要迭代。

然而,有时候,做额外的工作是有正当理由的。例如,在安全敏感的应用程序中,完成某些工作所需的时间可能会泄漏有关数据的信息。(这被称为定时攻击,这是更一般的侧通道攻击的特例。)例如,当字符串比较发现字符串之间的第一个差异时,它通常会中止并返回false。然而,这意味着攻击者可以,例如,确定密码开头有多少个字符是正确的,从而降低了蛮力的复杂性--迫使密码从** (即指数复杂度)降至*(即多项式复杂度)。

因此,这将是一个示例,在这个例子中,您总是需要遍历整个数组,并且不能提前中止,因为无论在哪里发生差异,您都需要花费相同的时间。

不过,情况似乎并非如此。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/302830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档