2

在我学习编程时阅读的所有教程和书籍中,遍历数组的做法一直与 for 循环一起使用:

int len = array.length();
for(int i = 0; i < len; i++) {//loop code here}

人们有没有理由不使用

for(int i = length(); i > -1; i--) {//loop code here}

据我所知,代码更短,更易于阅读,并且不会创建不必要的变量。我可以看到在某些情况下可能需要从 0 到 end 遍历数组,但在大多数情况下方向并没有影响。

4

4 回答 4

10

在大多数情况下,方向没有区别

诚然,在许多情况下,假设没有任何例外,您最终会得到相同的结果。

但就考虑代码的作用而言,从头到尾考虑它通常要简单得多。这就是我们在余生中一直在做的事情。

哦,你的代码中有一个错误 - 你几乎肯定不希望length()作为初始值 - 你可能想要array.length() - 1否则它开始成为数组的无效索引(并且只有在修复之后length()array.length()。你这个错误的事实证明了我的观点:你的代码比你不喜欢的代码更难快速推理。

在几乎所有情况下,使代码更易于阅读和理解都比额外变量的微小、几乎总是无关紧要的代码重要得多(您没有指定语言,但在许多情况下,在我自己的代码中,我只是array.length()在每次迭代时调用,然后让优化对其进行排序。)

于 2012-10-16T20:35:28.157 回答
3

原因是可读性。从 0 开始枚举对我们大多数人来说最有意义,因此它是大多数开发人员的默认选择,除非算法明确需要反向迭代。

在当今所有常见的编程平台中,声明一个额外的整数变量几乎没有成本。

于 2012-10-16T20:35:36.440 回答
1

取决于您使用的平台。例如,在 Java 中,编译器优化非常好,如果它没有产生任何明显的差异,我不会感到惊讶。我曾经对各种不同的技巧进行基准测试,以了解哪些真正更快,哪些不是。经验法则是,如果您没有强有力的证据证明您在浪费资源,请不要试图智取 Java。

于 2012-10-16T20:39:55.123 回答
0

第一个原因是你如何看待它。一般来说,作为人类,我们确实从头到尾迭代,而不是相反。

第二个原因是这种语法源于像 C 这样的语言。在这种语言中,在某些情况下,从结尾到开头是完全不可能的,最明显的例子是字符串 ( char*),通常会为您提供起始地址你必须通过枚举来计算它的长度,直到你找到0.

于 2012-12-11T21:47:49.393 回答