![]() |
Уникальные идентификаторы для объектов
Здравствуйте, мне нужно каждому создаваемому объекту присвоить уникальный идентификатор, который больше не встречается у других объектов. Решил, что лучше всего будет присваивать новому объекту идентификатор больший на 1, чем идентификатор предыдущего созданного объекта. Скажем, если у нас создано 10 объектов и десятый имеет идентификатор 10, то одиннадцатый будет иметь идентификатор 11 и т.д. Проблема в том, что если мы после этого удалим пятый объект и создадим новый, то его идентификатор будет равен 12, а хотелось бы что бы было 5 (после удаления объекта его идентификатор освобождается и его может занять другой объект) Подскажите, пожалуйста, как вообще можно все это организовать?
|
А для чего нужны айдишники?
Если вам необходимо к каждому объекту привязать какие-то данные, то с этой задачей как нельзя лучше справится класс Dictionary. С его помощью можно вообще обойтись без айдишников и использовать ссылку на объект как ключ для доступа к данным: Код AS3:
|
А вы используйте пул объектов, чтобы вообще не нужно было удалять объекты и освобождать идентификаторы.
А как вы вообще раздаете айдишники? Если вам способ, предложенный товарищем Gaen не нравится, то можно сделать как-то так: Код AS3:
|
Цитата:
|
Если точно по описанию задачи, то просто создайте массив с номерами удаляемых, и при создании нового сначала берите номер из этого массива, и только если он пуст - следующий из "большого" ряда. При удалении объекта соответственно кидайте его номер в массив удаленных, в запасник.
|
Ну я не 10 секунд писал сообщение.
Добавлено через 4 минуты ChuwY, а зачем увеличивать _numObjects когда номер взят из запасника? |
Не ну если просто чтоб _numObjects несла еще и справочный функционал "сколько вообще объектов" то пусть живет)))
|
Еще можно отсортировать массив объектов по идентификаторам и пройтись по нему этим циклом:
Код AS3:
|
Цитата:
Цитата:
Так что свойство просто следует своему названию, что гуд. А еще все именно так, потому что я уже засыпаю и не успел подумать о экономии на этом инкременте\декременте. |
А если так?
Код AS3:
|
| Часовой пояс GMT +4, время: 00:18. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.