编程时常见的情况是,给定一个列表,当条件为真时,我们必须遍历列表和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
@nraduka它通过这样做创建一个新列表,他想在原地更改列表。 –
如果你真的坚持不要创建一个新的列表 - 你可以每次删除一个项目时减少“我”。 –