Как найти длину ассоциативного массива в ActionScript 3.0? - PullRequest
10 голосов
/ 12 ноября 2008

Есть ли простой способ получить длину ассоциативного массива (реализованного как Object) в ActionScript 3.0?

Я понимаю, что есть два основных способа создания ассоциативных массивов в AS3:

  1. Использовать объект Dictionary; особенно удобно, когда ключ не обязательно должен быть string
  2. Используйте Object и просто создайте свойства для каждого желаемого элемента. Имя свойства - это ключ, а значение - это значение.

Мое приложение использует подход № 2 (используя класс Object для представления ассоциативных массивов).

Я надеюсь, что есть нечто более родное, чем мой цикл for, который вручную подсчитывает все элементы.

Ответы [ 4 ]

9 голосов
/ 13 ноября 2008

Вы должны считать их в цикле for, как и вы. Конечно, вы можете создать класс и вставить цикл for в этот класс.

Чтобы узнать о коллекциях в AS3, отметьте эти парни .

Редактировать 2013 Не удивительно, что ссылки разрываются со временем. Попробуйте этот новый: http://www.grindheadgames.com/get-the-length-of-an-object.

4 голосов
/ 13 ноября 2008

Проведение нескольких тестов на самом деле меня удивило. Вот обычное использование массива:

var things:Array = [];
things.push("hi!");
trace(things.length);
// traces 1
trace(things);
// traces hi!

Вот если мы установим значение в строку:

var things:Array = [];
things["thing"] = "hi!";
trace(things.length);
// traces 0
trace(things);
// traces an empty string
trace(things["thing"]);
// traces hi!

В основном, если вы добавляете вещи, используя строки, вы устанавливаете свойства, а не добавляете их в массив. Заставляет меня задуматься, почему Array так динамичен.

Так что ... да, посчитайте пункты с циклом for ...

3 голосов
/ 14 ноября 2008
var count:int; 
var key:String; 

for (key in myObject)
{ 
    count++; 
} 

trace ("myObject has this many keys in it: " + count);

или, альтернативно, синтаксис для каждого (я не проверял, что быстрее)

for each (var o:* in myObject)
{
    count++;
}
3 голосов
/ 12 ноября 2008

Я думаю, что вы застряли с подсчетом их "вручную".

Один из вариантов - обернуть все это в класс и сохранить отдельную переменную, которую вы обновляете при добавлении / удалении.

...