![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 212
|
Здравствуйте, мне нужно каждому создаваемому объекту присвоить уникальный идентификатор, который больше не встречается у других объектов. Решил, что лучше всего будет присваивать новому объекту идентификатор больший на 1, чем идентификатор предыдущего созданного объекта. Скажем, если у нас создано 10 объектов и десятый имеет идентификатор 10, то одиннадцатый будет иметь идентификатор 11 и т.д. Проблема в том, что если мы после этого удалим пятый объект и создадим новый, то его идентификатор будет равен 12, а хотелось бы что бы было 5 (после удаления объекта его идентификатор освобождается и его может занять другой объект) Подскажите, пожалуйста, как вообще можно все это организовать?
|
|
|||||
|
strange mood
|
А для чего нужны айдишники?
Если вам необходимо к каждому объекту привязать какие-то данные, то с этой задачей как нельзя лучше справится класс Dictionary. С его помощью можно вообще обойтись без айдишников и использовать ссылку на объект как ключ для доступа к данным:
__________________
тонкий тролль, осеянный благодатью Последний раз редактировалось Gaen; 10.03.2012 в 01:37. |
|
|||||
|
А вы используйте пул объектов, чтобы вообще не нужно было удалять объекты и освобождать идентификаторы.
А как вы вообще раздаете айдишники? Если вам способ, предложенный товарищем Gaen не нравится, то можно сделать как-то так: class MyObject{ // static private static const FREE_INDEXES : Vector.<uint> = new Vector.<uint>(); private static var _numObjects : uint = 0; // private var _index : uint; public function MyObject(){ if(FREE_INDEXES.length){ _index = FREE_INDEXES.pop(); } else { _index = _numObjects; } _numObjects++; } public function destructor():void{ FREE_INDEXES.push(_index); _numObjects--; } }
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. Последний раз редактировалось ChuwY; 10.03.2012 в 02:08. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 212
|
Нечто вроде серийного номера. Скажем, если есть куча роботов, то нужно их различать: "ROB- 123","ROB- 124" и т.п. Идентификатор, будет отображаться, так что эфемерная ссылка не выход
![]() Последний раз редактировалось PlutDem; 10.03.2012 в 02:14. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Если точно по описанию задачи, то просто создайте массив с номерами удаляемых, и при создании нового сначала берите номер из этого массива, и только если он пуст - следующий из "большого" ряда. При удалении объекта соответственно кидайте его номер в массив удаленных, в запасник.
__________________
Reality.getBounds(this); |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну я не 10 секунд писал сообщение.
Добавлено через 4 минуты ChuwY, а зачем увеличивать _numObjects когда номер взят из запасника?
__________________
Reality.getBounds(this); |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Не ну если просто чтоб _numObjects несла еще и справочный функционал "сколько вообще объектов" то пусть живет)))
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 212
|
Еще можно отсортировать массив объектов по идентификаторам и пройтись по нему этим циклом:
Если ничего не найдется, то новый идентификатор будет равен objects.length++. Хотя метод Wolsh выглядит самым простым и быстрым. |
|
|||||
|
Цитата:
Так что свойство просто следует своему названию, что гуд. А еще все именно так, потому что я уже засыпаю и не успел подумать о экономии на этом инкременте\декременте.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 212
|
А если так?
Если элемент в массиве не занят, то добавляем объект туда и присваиваем ему идентификатор равный номеру элемента массива. Если свободных элементов нет, то добавляем в конец массива новый элемент и помещаем объект туда. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|