3

I want to iterate over an ArrayCollection in Flex while there can be items added and removed.

Since i didn't find a way to use a "classic" Iterator like in Java, which would do the job. I tried the Cursor. But it doesn't really work the way i want it to be ;) So how do I do it nicely ?


    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();

    }

5 Answers 5

3

I think better to use New Collection/Array for opertations as

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) ;
}

Hopes that helps

Sign up to request clarification or add additional context in comments.

1 Comment

that will definitly do the job... but i like more the iterator idea which does what i want in a "blackbox"
2

Try to use the following:

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

Comments

1

There is a solution for your problem:

http://www.ericfeminella.com/blog/actionscript-3-apis/

Have a look at the CollectionIterator class.

Cheers

1 Comment

looks nice but i am not quiet shure if i want to use 3rd party things ;)
0

Take a look at ActionLinq. It implements the .Net Linq2Objects pattern, including IEnumerable. Of course, you need to be careful, because you are modifying the items you are iterating over...

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

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

Comments

-1

In flex (or actionscript) any change that you do, is visible instantly. So you can do what you want in a for:

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

I think that should work fine.

8 Comments

ok that would be nice, because in Java it would throw an exception. have to try it
removeElement is not a method of an arrayCollection
@Dukeatcoding, it will indeed throw an exception due to the fact that you will try to delete elements that are not longer at a certain index
@Duke: working with flex you will see that it doesn't have concurrency approach for developer. You won't have multithreading problems in flex!
You have to iterate backwards or you end up skipping elements. If you remove the current element, then increase the counter, you end up skipping the next element
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.