Массив не повторяется, если используется ассоциативно - PullRequest
1 голос
/ 26 июня 2009

Привет, когда у меня есть массив в Actionscript

var arr : Array = new Array();
arr["fsad"] = 1;
trace(arr.length);

и теперь поместите в него запись с ассоциативной строкой, а затем посчитайте длину, которую я получаю длиной 0, но почему? Как я могу повторить это сейчас?

Заранее спасибо

Себастьян

Ответы [ 5 ]

2 голосов
/ 26 июня 2009

То, что вы хотите выполнить, называется Словарём, я думаю:

1 голос
/ 26 июня 2009

Есть сообщение, описывающее ту же проблему, о которой вы упоминали

Как найти длину ассоциативного массива в ActionScript 3.0?

Я надеюсь, что это поможет

1 голос
/ 26 июня 2009

Ну, процитирую ссылку :

Не используйте класс Array для создания ассоциативных массивов (также называемых хешами), которые представляют собой структуры данных, которые содержат именованные элементы вместо пронумерованных элементов. Для создания ассоциативных массивов используйте класс Object. Хотя ActionScript позволяет создавать ассоциативные массивы с использованием класса Array, вы не можете использовать любые методы или свойства класса Array с ассоциативными массивами.

Я не уверен, почему AS3 все еще позволяет ассоциативно использовать массивы - возможно, они беспокоились о миграции AS2 - но этого лучше избегать. Насколько я знаю, встроенные приборы Array, такие как length и pop() будут просто игнорировать все, что добавлено с ключом, который не является целым числом, но они также могут вести себя непредсказуемо.

0 голосов
/ 27 июня 2009

вы можете создавать собственные ассоциативные массивы с помощью Proxy ... это будет связано с высокой производительностью, но вы можете реализовать переопределение доступа к массиву getProperty и setProperty, for each in и for in переопределение nextNameIndex а также nextValue и nextName соответственно ... вы также можете реализовать методы Array forEach, filter, map, any, every и т. д., чтобы он выглядел как настоящий массив извне ... но вы должны делать это только в ситуациях, когда это не является критичным или неизбежным ...

Greetz

back2dos

0 голосов
/ 26 июня 2009

В JavaScript (который является братом ActionScript) с помощью spidermonkey:

var obj = new Object(); // {}
obj["foo"] = 1;
print(obj.__count__); => 1 // non-standard Gecko

var arr = new Array(); // []
arr.push(1);
print(arr.length); => 1

Используйте Array для массивов и Object для словарей. Это не похоже на PHP, где все делается одним и тем же типом.

...