Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   работа с изменяющимися массивами (http://www.flasher.ru/forum/showthread.php?t=146515)

elzone 10.11.2010 14:29

re -De-

подскажи пожалуйста - как добавлять объекты в дерево DisplayObject и сохранять соответствие этого объекта и его id

TanaTiX 10.11.2010 14:34

Я это примерно так вижу:
Код AS3:

var dict = new Dictionary(true);
dict[id]=new YouObject(type, x, y);
 
function change(id:String, x, y):Boolean{
        if(dict[id]){
                dict[id].setParams(x, y);
                return true;
        }else{
                return false;
        }
}


-De- 10.11.2010 15:12

Добавлять с помощью addChild.
сохранять соответствие типа
Код AS3:

//где-то там переменная класса или статик может даже - хранилка
public var list:Object = new Object();
//собсно сохранять
list[ID] = obj;
//нетривиальная (для новичков и не читающих доки) вещь - как удалять это соответствие
delete list[ID];

Ну в общем dimarik не написал addObject, а вы не знаете, как работать с Object? бида
Код AS3:

function addObject(id:String, obj:CustomObject ):void{
    if(id in list) {
        //фигня случилась, уже есть ваш айдишник, забыли удалить или ещё где логика страдает
        throw new Error("duplicate id");
    }
    list[id] = obj;
}

TanaTiX, а где там сохранение, зачем всё остальное и почему Dictionary, а не Object и не Array?

TanaTiX 10.11.2010 16:21

Не Array и не Vector, т.к. проще обратиться по имени, чем перебирать все элементы до поиска нужного.
Почему не Object - мне кажется, что Dictionary более специфичен для указанной задачи. Тут, собственно, нет уверенности, скорее личное предпочтение. К тому же Object использует в качестве ключа исключительно строку и возможность использования слабых ссылок. Если есть другие аргументы - было бы интересно.

Psycho Tiger 10.11.2010 16:38

Цитата:

Почему не Object - мне кажется, что Dictionary более специфичен для указанной задачи.
Object - строковой хэш, Dictionary - объектный. Тут не может быть "более" специфичных, подходит всегда только один. (в плане правильности подхода - не стоит ради строкового хэша делать объектный)

-De- 10.11.2010 19:09

А Array/Vector - это в некотором роде числовой мап, а айдишник у нас что? Кстати, операция узнавания значения массива по индексу - она быстрее всех этих ваших хешэй (я, кстати, думаю, что индусы там дерево хорошо если сбалансированное сделали, а не хэш). Ну у него минусы, в общем, если индекс большой, то и массив большой. Хотя есть подозрение, что таки Array он на самом деле не массив, а мап и он память вроде не жрёт тоннами, если завести в нём 1 эл-т с номером 100000000.
Dictionary лучше рассматривать как ссылочный мап, т.е. ключ - ссылка, хотя он допилен до общего мапа. Потому он тяжелей. Установка использования слабых ссылок, кстати, просто не работает для тех эл-тов Dictionary, где ключ - "простой" обьект (на ваше счастье, потому что GC иначе сожрал бы связь).

alatar 10.11.2010 19:34

Цитата:

Vector - это в некотором роде числовой мап
Вектор, это таки, далеко не мап :)

Добавлено через 7 минут
Разница в скорости тоже не особо впечатляет: http://jacksondunstan.com/articles/855
60мс на 1000000 операций, можно не принимать в расчет.

TanaTiX 10.11.2010 19:46

А что такое мап?
Код AS3:

не стоит ради строкового хэша делать объектный

можно поподробней, в чем в данном случае минус Dictionary? И когда тогда его использовать имеет смысл?
Цитата:

Кстати, операция узнавания значения массива по индексу - она быстрее всех этих ваших хешэй
В данном случае у нас нет индекса, т.е. нужно сравнить все элементы с некоторым значением.
Цитата:

Dictionary лучше рассматривать как ссылочный мап, т.е. ключ - ссылка, хотя он допилен до общего мапа. Потому он тяжелей.
Цитата:

Установка использования слабых ссылок, кстати, просто не работает для тех эл-тов Dictionary, где ключ - "простой" обьект (на ваше счастье, потому что GC иначе сожрал бы связь).
А вот на счет этого можно поподробней?

Psycho Tiger 10.11.2010 20:00

-De-, Вы знаете как массивы хранятся в флеш плеере? Я не знаю. Догадки тут неуместны - если говорить о лоу-левеле за ширмой abc кода, то и говорить о нём. Короче, программиста не должны волновать низкоуровневые особенности кода, в который он транслируется.

Мы имеем что имеем. Array можно рассматривать как надежный массив (вектор) указателей, с оговорками к простым типам. Vector - аналогично. Только оно нам надо? Меня как-то не очень волнует какой технологией реализуется что-то нативное.

Цитата:

Хотя есть подозрение, что таки Array он на самом деле не массив, а мап и он память вроде не жрёт тоннами, если завести в нём 1 эл-т с номером 100000000.
С точки зрения юзера задав 100000 элемент 99999 создадутся, потому что length будет говорить 1000000. А хэлп гласит
Цитата:

Неотрицательное целое число, которым задается количество элементов в массиве.
Цитата:

можно поподробней, в чем в данном случае минус Dictionary? И когда тогда его использовать имеет смысл?
Когда нужен хэш, где ключами являются объекты.
Цитата:

В данном случае у нас нет индекса, т.е. нужно сравнить все элементы с некоторым значением.
Почему же, есть хэш-функции свёртки чего-то там в число, которое будет являться индексом. Я не очень знаю как это дело работает, но там не банальное сравнение.

Цитата:

А вот на счет этого можно поподробней?
Цитата:

Установка использования слабых ссылок, кстати, просто не работает для тех эл-тов Dictionary, где ключ - "простой" обьект (на ваше счастье, потому что GC иначе сожрал бы связь).
Простые типы передаются по значению, в контексте AS3 говорить о ссылках на простой тип вообще говорить бессмысленно.

TanaTiX 10.11.2010 20:40

Т.е. в данном случае, что Dictionary, что Object - один хрен?
Цитата:

Почему же, есть хэш-функции свёртки чего-то там в число, которое будет являться индексом. Я не очень знаю как это дело работает, но там не банальное сравнение.
А есть ссылочки на тему?


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

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