среда, мая 07, 2008

Принцип перебора for .. in . AS3

Столкнулся с интересной проблемой.
Есть ассоциативный массив:
static private const distribution:Object = {item1:2,item2:2,item3:2};
Осуществляю перебор элементов:


. . .

this.__distribution=distribution;

. . .

for (var name:String in this.__distribution) {
count=int(this.__distribution[name]);

. . .

}

Ожидаем, что элементы массива будут перебираться по каком-нибудь вменяемому принципу - например, в AS2 перебор осуществлялся от последнего к первому.
Однако, порядок перебора свойств оказывается совершенно не очевидным.
Иногда перебор начинается с item2, иногда с item3. Особенно это очевидно при запуске приложения на разных компьютерах.

Ничего удивительного, в хелпе об этом так и сказано:
Iterates over the dynamic properties of an object or elements in an array and executes statement for each property or element. Object properties are not kept in any particular order, so properties may appear in a seemingly random order.

1 комментарий:

Andy One комментирует...

Правильно. Потому что при создании объекта через {a,b,c}, никто не обещает что объекты в памяти будут храниться в таком же порядке.

Если же добавить переменные после создания обьекта:

var t:Object = new Object();
t.a = 1;
t.b = 1;
t.c = 1;

в for .. in они придут в том же порядке a,b,c.