Исходя из вашего пересмотренного вопроса, я не рассматриваю это как проблему оптимизации поиска, если мы не говорим о тысячах объектов.Когда один из ваших объектов из пула «умирает», он может уведомить ваш код, управляющий объектами (по событию или обратному вызову), и вы затем обнуляете его запись в своем словаре активных элементов (или склеиваете его из массива, или уничтожаете).с флагом, подробнее об этом ниже **), и поместите его в другой массив, представляющий собой стек объектов, ожидающих повторного использования.Когда вам нужен новый объект, вы сначала проверяете, есть ли что-нибудь в вашем стеке утилизации, и, если он есть, вы получаете один из них и повторно инициализируете его.Если стек пуст, вы создаете новый.
** Лучший выбор структуры данных, которую вы используете для хранения списка активных объектов (Array / Vector / Dictionary), вероятно, будет зависеть от характера вашегоlist - я бы поспорил, что структура данных, которую быстрее всего зациклить (например, если вам нужно делать это каждый кадр для их обновления), не обязательно та, из которой дешевле всего удалять.Какой из них вы выбираете, должен работать в зависимости от количества объектов, которые вы получили, и частоты, с которой они удаляются, повторно добавляются или обновляются.Просто сделайте небольшой тест, достаточно просто протестировать их все.Если у вас относительно мало объектов и вам не нужно их циклически перебирать, я бы положил деньги в Словарь для активного пула.
Ключевой момент, который нужно получить из этого ответа, заключается в том, что вы должныне просматривайте все предметы каждый раз, когда вам нужно найти мертвый для повторного использования, вы должны вытащить их, когда они умрут, и сохранить их как отдельный пул.