Бесплатно скачать Adobe Flash Player
Flash Ripper RSS Readers

Класс Dictionary — это жесть и экономия времени

Недавно на большом проекте осознал, что могу сократить кучу кода за счет использования появившегося в AS3 класса Dictionary (уже давно, позор мне, мне же известного ;-)
Было:

function tileIsRendered(theTile:MapTile):Boolean {
var result:Boolean;
var aTile:MapTile;
for each(aTile in renderedTiles)
{
if(aTile == theTile)
{
result = true;
break;
}
}
return result
}
Стало:
function tileIsRendered(theTile:MapTile):Boolean {
return renderedTiles[theTile] == true
}

Если вы не в курсе: Dictionary—это подобие ассоциативного массива, но его ключами можно назначать не только строки, но и объекты любого типа. Ключи объекта Dictionary работают как ссылки на объекты. Осталось проверить, насколько этот способ быстре вычислительно.

Писал Rost, 29 Октябрь 2007 13:51

Найдены баги:

век живи - век учись!

способ естественно быстрее, но ресурсоёмчее(в теории памяти больше жрать будет на объект Dictionary) )

__i - 29 Октябрь 2007 14:47

Я сейчас как раз тоже начал этот Класс использовать, кстате как раз для хранения тайлов:)

Shagrat - 29 Октябрь 2007 15:43

Dictionary - это, бесспорно, очень полезный класс. Правда иногда забываешь о его существовании и решаешь задачу массивами или объектами. Спасибо, что напомнил о нем. =)

Garbage Collector - 29 Октябрь 2007 20:19

Я немного не в теме Flash-а, но IMHO ключ хэша с типом отличным от строки в приведенном примере вам не нужен.

Vadim Voituk - 30 Октябрь 2007 9:27

А Вадим діло говорить, чому це в тебе в об'єкті типу Dictionary 'renderedTiles' kлюч хеша є типу Tile? Здається можна було б обійтись і

function tileIsRendered(theTile:MapTile):Boolean {

return renderedTiles[theTile.id] == true

}

JabbyPanda - 30 Октябрь 2007 14:10

Вообще незаменимый класс для ассоциированного хранения данных. На нём сделали и "список" (по сути тот же "словарь", где ключ равен значению). По скорости неахти, так что злоупотреблять не советую.

Антон Волков - 30 Октябрь 2007 14:32

var o:Object = new Object();
var a:Object = new Object();
a.toString = function():String {
return "It's me";
}
o[a] = true;
o[true] = a;
trace(o[a]+',',o[true]);

__etc - 30 Октябрь 2007 16:01

Vadim Voituk™, JabbyPanda™ - да, вы правы. Честно говоря, в примере - не реальный код из проекта, а просто первая иллюстрация, пришедшая мне в голову. И она не самая удачная из возможных :)

Поэтому возникает желание: давайте подберем самые лучшие (желательно простые) примеры использования Dictionary?

Один вариант, который я сейчас могу вспомнить: Когда мы имеем дело с "чужим и запечатанным" классом, который не поддерживает свойство ID. Тогда мы можем использовать Dictionary для имитации такого свойства у класса, изначально его не поддрживающего, передавая экземпляры класса как ключи Словаря, и присваивая им значения ID.

Но я хочу еще примеров.

Спасибо за чоткие комменты! :)

Рост - 30 Октябрь 2007 16:30

__etc™ - спасибо хакерам :)

С динамическими классами все клево; но ведь может быть и такая ситуация:

var o:Shape = new Shape();
var a:Shape = new Shape();
...

Рост - 30 Октябрь 2007 16:36

Да ладно, это шутка была =)
Объект не заменит Dictionary =)

Что касается Dictionary, то мне нужно было удалять и добавлять элементы в него без поиска . И так, чтобы не было двух одинаковых ссылок на один и тот же объект.

__etc - 30 Октябрь 2007 17:57

В одном проекте пришлось отказаться от Dictionary в пользу двух массивов т.к. перебор двух массивов намного быстрее чем перебор одного Dictionary. За то, если нужно просто достать зеначение по не строковому ключу, то Dictionary не в пример быстрее.

a_[w] - 31 Октябрь 2007 13:06

Тоже отказался от Dictionary в угоду скорости поиска данных.

pazaal - 1 Ноябрь 2007 13:56



Это запись из категории 'AS3'. 10 еще cвежих:

Архивы по категориям:

3D-18, Adobe AIR-38, Animation-1, Apache Ant-1, Architecture-1, ARP-1, Art-26, Articles-26, AS3-57, Books-9, Business-3, Cairngorm-3, CI-1, Classes-10, Coding-31, Community-118, Components-19, Contests-30, conventions-1, Cool-Job-10, Debug-21, Design-28, Development-84, ecology-4, EMO-2, Events-17, Extensions-2, FAQ-9, FDS-1, Flash and html-8, Flash Player-38, Flash Updates-12, flash-on-devices-1, Flash-scene-1, flash10-4, FlashLite-2, Flex-49, Flex 2-80, flex4-3, flexcamp-2, Flickr-1, FMS-2, FPUG-61, frameworks-1, Games-20, Good Job!-44, HaXe-16, Health-2, Humor-11, Ideas-14, IV-1, JavaScript-2, Job-30, JSFL-8, Links-2, Linux-3, Maps-1, Math-8, Money-16, music-1, MXML-1, Open Source-16, Optimization-4, parenting-3, Patterns-2, Personalities-27, Philosophy-4, Politics-1, posters-1, Preloading-3, Productivity-10, PureMVC-11, Pv3d-1, Rafpug-5, Red5-3, Remoting-11, Resources-21, Ruby-6, SAAS-1, Security-11, SEO-9, Silverlight-7, Sound-3, sport-4, Strategy-122, Tamarin-2, Tools-113, Training-3, Trash-8, URAFPUG-14, Urgent-1, Usability-6, Video-6, VoIP-7, Wallop-1, Wishlist-3, XML-1, Архив всех записей (большой)

За последние месяцы:

Ноя 2008: Ноябрьская встреча RAFPUG 12 — для креативных, В продолжение темы флэш-блогов, весь Ноя

Окт 2008: Ура — вторая лицензия Alternativa3D уезжает в Киев!, Влещь на глагне III IIIIIII?, весь Окт

Сен 2008: Встречайте Open Source Flash Media Server — Mammoth, Срочно нужен толковый Flex-разработчик в Харькове (+Java), весь Сен

Авг 2008: Flex Gangsta Rap Video WTF Bro?, 27 сентября — встреча UAFPUG во Львове и плюшки от Adobe, весь Авг

Июл 2008: Тенденции среди работодателей: Adobe Flex, Adobe AIR, Silverlight, Спорт спасет красоту, которая спасет мир!, весь Июл

Июн 2008: Попытка предварительных выводов о встрече аниматоров, Онлайн трансляция встречи аниматоров в Донецке, весь Июн





Примечания:
Статус документа
: в процессе
   2002-2007 Производство: Рост Прибыли · О проекте · Подписка на новости (RSS)