Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.11.2012, 23:18
ros.pro вне форума Посмотреть профиль Отправить личное сообщение для ros.pro Найти все сообщения от ros.pro
  № 1  
Ответить с цитированием
ros.pro

Регистрация: Nov 2012
Сообщений: 2
По умолчанию Многомерный ассоциативный массив

Доброго времени суток, уважаемы форумчане.

Начал знакомиться с as3 и был не приятно удивлен, отсутствием полноценных ассоциативных массивов. Хотя может я и ошибаюсь.

Необходимо занести в массив, конструкцию следующего вида:

arr[n][переменная_с_именем] = значение

Например:
Код AS3:
str = "name";
arr[n][str] = val;
n - это счетчик, изменятся от 0 до какого-то числа. str тоже изменяется.
Как это реализовать?
Заранее спасибо.

Старый 05.11.2012, 23:26
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Код AS3:
var str:String = "name";
var arr:Array = new Array ();
//...
arr[n] = new Array ();
arr[n][str] = val;
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 06.11.2012, 02:08
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 3  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Наверно имелось в виду, чтобы не надо было if (arr[n] != null) ... при доступе к элементу и при создании аналогичные вещи писать - как в PHP. AS3 не PHP, но можно сделать себе класс:
Код AS3:
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;
    }
}
Ну или просто:
Код AS3:
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.
Старый 06.11.2012, 08:33
ros.pro вне форума Посмотреть профиль Отправить личное сообщение для ros.pro Найти все сообщения от ros.pro
  № 4  
Ответить с цитированием
ros.pro

Регистрация: Nov 2012
Сообщений: 2
Огромное спасибо iNils и expl. Оба совета очень полезны.

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:22.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.