2011-05-24 59 views
3

我想迭代Flex中的ArrayCollection,同時可以添加和刪除項目。添加和刪除項目時迭代ArrayCollection

因爲我沒有找到一種方法來使用像Java那樣的「經典」迭代器,它可以完成這項工作。我嘗試了光標。但它並不像我想要的那樣工作;)那我該怎麼做呢?


    var cursor:IViewCursor = workingStack.createCursor(); 

    while (!cursor.afterLast) 
    { 
     // Search 
        deepFirstSearchModified(cursor.current.node,nodeB,cursor.current.way); 
     // Delete Node 
     cursor.remove(); 
     // Next Node 
     cursor.moveNext(); 

    }

回答

3

我想更好地使用新集合/陣opertations作爲

private function parseSelectedItem(value:IListViewCollection):IListViewCollection{ 
var result:Array = new Array(); 
    for each(var item:Object in value) 
    { 
     //result.push(); 
     //result.pop(); 
    } 
    return new ArrayCollection(result) ; 
} 

希望幫助

+0

這將明確地做這項工作......但我像更多的迭代器的想法,做我想在一個「黑匣子」 – Dukeatcoding 2011-05-24 09:20:25

-1

在flex(或actionscript)中,您所做的任何更改都是即時可見的。所以你可以做你想要的東西:

for (var i : Number = myArrayCollection.length; i > 0; i--) { 
     myArrayCollection.removeItemAt(i - 1); 
    } 

我認爲應該可以正常工作。

+0

確定這將是很好的,因爲在Java它會拋出一個異常。必須嘗試 – Dukeatcoding 2011-05-24 08:44:20

+0

removeElement不是arrayCollection的一個方法 – 2011-05-24 08:46:55

+0

@Dukeatcoding,它確實會拋出一個異常,因爲您將嘗試刪除不再位於特定索引處的元素 – 2011-05-24 08:47:47

0

看看ActionLinq。它實現了.Net Linq2Objects模式,包括IEnumerable。當然,你必須要小心,因爲要修改的項目你迭代...

var workingStack:ArrayCollection = getData(); 
var iterator:IEnumerable = Enumerable.from(workingStack); 

for each(var item:String in iterator) { 
    doSomethingTo(workingStack); 
} 
2

嘗試使用以下內容:

for (var i:int = myArrayCollection.length - 1; i >= 0; i--) { 
    myArrayCollection.removeItemAt(i); 
}