Просмотр полной версии : Отследить добавление/удаление элементов вектора
Appleman
09.05.2018, 00:26
Друзья!
Имею вектор. Хочу, чтобы изменение его элементов (любым способом) вызывало событие. Как это можно наиболее бескровно реализовать?
Спасибо.
Написать класс - обёртку. Композиция будет лучше наследования.
https://github.com/SlavaRa/blooddy/blob/master/blooddy_core/src/by/blooddy/core/utils/ArrayEventDispatcher.as
@Tails, про композицию напомнило:
- vim лучше чем любая IDE!
- чем лучше?
- чем любая IDE
Еще, как вариант, можете попробовать VectorListModel из пакета AsWing. Но там работа идёт с массивом
Zebestov
09.05.2018, 23:54
Appleman, а ты уверен, что хочешь именно событие по каждому чиху, а не флаг, который когда дело доходит до обработки вектора, сообщает, что с момента последнего запроса вектор 1 или 100500 раз поменялся? Как правило логика может щелкать данными существенно чаще, чем эти данные нужно, например, отображать.
Appleman
10.05.2018, 11:16
СлаваRa, спасибо, круто!
Zebestov, да я сам ещё до конца не решил, чего на самом деле хочу :) Это вектор основных персонажей в Модели. С одной стороны, его не часто придётся дёргать по части изменения, но постоянно и многократно перебирать методом for each.
Нужно, чтобы добавление либо удаление элемента не оставалось незамеченным, но при этом не терялась способность иметь удобный доступ к элементам и перебирать их. Пока в Модели написал методы addCharacter2Pool(ch: Character) и removeCharacterFromPool(ch: Character). Но, боюсь, сам же забуду о необходимости пользоваться данными методами и зафигачу _characterPool.push(character) и буду рвать на жопе волосы, почему всё перестало работать нормально...
caseyryan
10.05.2018, 13:01
А тебе что вообще нужно делать с этими массивами? Нужен доступ по индексу к элементам? Могут ли элементы в массиве повторяться?
Подумай над этим. Ведь есть же другие типы коллекций. Например хэшкарты, в которых отсутствует индексатор, но зато элементы находятся за константное время O(1), без перебора. В as3 Dictionary и Object работают как хешкарты. Но в них ключи уникальны.
Zebestov
10.05.2018, 13:40
Но, боюсь, сам же забуду о необходимости пользоваться данными методами и зафигачу _characterPool.push(character)...
А ты не забывай )) бо все ты правильно сделал.
@Tails, про композицию напомнило:
- vim лучше чем любая IDE!
- чем лучше?
- чем любая IDE
Да, забавно получилось) Но я так и подумал, что человеку нужна конструкция более высокого уровня (Список игровых объектов), а не просто низкоуровневый вектор с уведомлением. Поэтому.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.