![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Nov 2012
Сообщений: 2
|
Доброго времени суток, уважаемы форумчане.
Начал знакомиться с as3 и был не приятно удивлен, отсутствием полноценных ассоциативных массивов. Хотя может я и ошибаюсь. Необходимо занести в массив, конструкцию следующего вида: arr[n][переменная_с_именем] = значение Например: n - это счетчик, изменятся от 0 до какого-то числа. str тоже изменяется. Как это реализовать? Заранее спасибо. |
|
|||||
|
Наверно имелось в виду, чтобы не надо было if (arr[n] != null) ... при доступе к элементу и при создании аналогичные вещи писать - как в PHP. AS3 не PHP, но можно сделать себе класс:
public class DoubleMap { public function DoubleMap() {} private var _hash:Object = {};// если использовать Array как хеш - можно огрести с памятью при определённых условиях, поэтому Ojbect pulbic function get(x:String, y:String):* { var subHash:Object = _hash[x]; return subHash != null ? subHash[y] : null; } public function set(x:String, y:String, value:*):void { var subHash:Object = _hash[x]; if (subHash == null) { subHash = {}; _hash[x] = subHash; } subHash[y] = value; } } arr = {}; arr[n + "#" + str] = val//Вместо # можно любой символ, который не попадется в n и str В первом случае на каждое значение n создаётся по объекту + вызов функции, а во втором на каждую вариацию n и str создается по строке (из-за конкатенации строк), может даже по 2. Плюс непонятно насколько постоянно время доступа к Object через [] и насколько зависит от количества элементов (в первом случае их немного на объект - во втором на порядок больше) Это не совсем ваш случай, но на всякий: Ещё, если используются числовые ключи и значения вписываются в 16 бит можно склеивать ключ из 2-х координат (первые 16 бит от int-та - под x, вторые - под y), и использовать в качетсве ключа у Object (не в коем разе не у массива - улёт по памяти и тормоза гарантированы) Т.е. получается одно преобразование к строке, вместо 3-х - каждое число по отдельности + склейка, работает в разы быстрее (побитовые операции кодирования x и y в один int в разы быстрее чем операции со строками - память выделять не надо) Последний раз редактировалось expl; 06.11.2012 в 02:27. |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 2
|
Огромное спасибо iNils и expl. Оба совета очень полезны.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 22:22. |
|
|
« Предыдущая тема | Следующая тема » |
|
|