【发布时间】:2017-10-04 16:18:23
【问题描述】:
编程时的一个常见场景是,给定一个列表,当条件为真时,我们必须遍历该列表和同一列表中的pop() 元素。
现在,在这种情况下,例如我有一个列表 a = [1, 2, 3, 4, 5, 6, 7, 9, 10],问题要求从列表中删除所有奇数元素。
所以,我只是采取这样的方法。
for (int i=0; i<=a.length; i++) {
if (a[i]%2 != 0) {
a.removeElementAtIndex(i);
}
}
现在,这在a 列表中的6 之前都可以正常工作。
之后,循环索引将是 6 并且将引用列表中的 7。由于7 是一个奇数,它会将7 从列表中删除。
现在,循环索引将是7,它将指向列表中的10。并且列表中的元素 9 现在位于索引 6 处,该索引已被循环检查。
所以,这种方法会导致错误!
问题:一种不会导致上述情况的方法,并且仅使用一个列表并且仅在元素上循环一次。
【问题讨论】:
-
听起来你在用JS。为什么不使用 array.filter()?这将遍历 a 中的所有元素并仅返回与条件匹配的那些值。所以 var results = a.filter(function(element) { //如果元素是偶数则返回 true 的逻辑});
-
@nraduka 它通过这样做创建了一个新列表,他想就地更改列表。
-
如果您真的坚持不创建新列表 - 您可以在每次删除项目时减少
i。 -
嗯,好的。我误解了@Dean Fenster 的想法是正确的
标签: list loops conditional-statements