我想使用AS“for each”语法循环遍历一组项目。在循环中,我有时需要从我正在迭代的集合中删除一个项目。
使用“for”循环,我会将其编码为(注意“ - ”运算符以将索引移回):
for (var n:int=0; n<ac.length; n++) {
var s:String = ac.getItemAt(n) as String;
if (s == 'c')
ac.removeItemAt(n--);
}
是否也可以使用“for each”构造做类似的事情?
答案 0 :(得分:3)
在我所知道的所有语言中,foreach
要求迭代的集合在迭代时不会改变。
所以,简单的答案是 - 不,你不能。但是你在样本中做的方式还可以。
编辑:您可以做的是创建一个新的项目列表,需要在foreach(itemList)中删除,而不是通过另一个foreach(来自deletedItems)并从中删除itemList中。唯一令人担心的是你不会迭代你正在改变的集合。
答案 1 :(得分:3)
复制arraycollection
或您的数据结构。在原件上做reverse for loop
并从复制的结构中删除所需索引处的元素。
输出:您的新数据结构减去您不想保留的元素。
答案 2 :(得分:0)
如果您正在讨论的for each
构造允许在迭代期间访问索引,但即便如此,它肯定会适得其反,因为我确信大多数语言都认为该集合不会突然改变它如果您使用for each
,则在迭代期间使用“length”或其索引。如果你输入一个索引参数,那么你将回到常规的for
结构中,这样整个练习最终都是徒劳的。
答案 3 :(得分:-1)
这可以通过 for ... in 循环实现。迭代不会中断。
var o:Object = { a: 0, b: 1, c:2 };
for (var k:String in o)
{
delete o[k];
}