![]() |
Возможно ли, не имея ссылки на объект, получить этот объект из массива
Здравствуйте. Есть вектор:
Код AS3:
Исходные данные: тип искомого объекта (класс Object2) и сам массив с этим объектом. Больше у нас ничего нет. Подскажите, пожалуйста, возможно ли программно найти этот объект в массиве по его классу? Добавлено через 1 минуту PS: Может лучше использовать Dictionary? Добавлено через 6 минут Во я затупил! Можно пройтись по массиву и у каждого элемента спросить: он is Object2, или нет. Но может есть более продвинутые решения? |
Код AS3:
блин не дочитал до конца =) |
anmelegov, спасибо, что откликнулся. Об этом и сам подумываю. Только вот не нравится мне такой вариант. Дело в том, что мне в разных частях проекта часто придется выдергивать то Object2, то SomeClass234 и др. И все время потрошить массив, как-то... Думал спрошу здесь, мож у кого более приятные идеи появятся.
Добавлено через 42 секунды PS: где-то читал, что for быстрее чем for each, вот и всегда использую первый |
anmelegov, поиск окончен будет после цикла for each.
|
for быстрее, for each в каждой итерации будет записывать object, а запись в память всегда тормозит
|
Цитата:
|
Цитата:
|
|
я бы посоветовал вам сделать Dictionary если уж так важно имеет отношение Class->object. Если вам нужен именно массив чтоб им ещё как-то пользоваться оставьте его, а параллельно ему сделайте Dictionary где ключом будет класс а значением объект.
Добавлено через 1 минуту Это в случае если ваши классы инстанцируются не один раз, а если один раз то можно вообще классического синглтона замутить со статическим getInstance() который один раз создаст объект и сохранит его в статическом поле, в потом его и будет возвращать. |
Да - отношение именно Class->object. Не особо важно, массив это или еще что-то - главное список объектов, которые можно вытащить. А вот с синглтоном немного не понятно... У меня сейчас есть статический вектор с экземплярами. Он не меняется никогда...
|
У вас может быть несколько таких объектов одного класса? Т.е. в разных частях программы разные такие списки с разными объектами одних и тех же классов? Если да, то dictionary лучший вариант.
А если от каждого класса создаётся только один объект, то это синглтон, и можно хранить ссылку на объект в самом классе. Вот так Код AS3:
и пользовать соответственно потом Код AS3:
|
Aquahawk, большое спасибо за информацию. Я знаю что такое синглтон :). Только не совсем понимаю какая мне разница - хранить список в синглтоне или как статический массив в каком-нибудь служебном классе.
Например я оперирую 10-ю разными классами. Список только один. В этом списке по одному объекту каждого из этих 10-ти классов. Они не повторяются в списке. Я создал массив этих 10-ти экземпляров. Сделал этот массив как статическое свойство некоего класса. Именно статическое, так как этот список мне понадобится в любой момент и неизвестно где. Да - можно сделать синглтон, но суть не изменится от этого. А вот за пример с Dictionary - был бы вам очень благодарен. Читал в справке про эти словари - но там слишком скудно написано и всегда бросал эту затею, так как не совсем понятно что это такое и как его юзать.. |
Код AS3:
Dictionary это таблица где ключами являются сами объекты, выражаясь в терминах низкоуровневых языков, ключом является адрес ключевого объекта, а значение тоже объект. Но поскольку в as класс представлен в рантайме в виде объекта типа Class то всё хорошо работает. Добавлено через 5 минут А хранить я вам предлагал не список в синглтоне, а вообще не делать список. Если у вас десять таких классов то сделать каждого из них синглтоном и пусть он сам себе ссылку на свой объект и хранит. Вообще без списка, нужен объект этого класса, у него и взяли. Добавлено через 6 минут но словарь лучше, больше возможности для расширения. |
Aquahawk, спасибо большое. То есть, если у меня есть список экземпляров некоторых классов, то с помощью дикшнери я могу вытащить любой экземпляр по названию класса?
Код AS3:
Только вот интересно, что будет если объекты повторятся? Код AS3:
|
Код AS3:
|
Ага, ну тогда спасибо. Тема исчерпана - движемся в сторону словарей...
|
Код AS3:
|
Код AS3:
|
Psycho Tiger писал в час ночи копипастом чисто чтоб показать идею. Согласен что ужас.
|
| Часовой пояс GMT +4, время: 08:07. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.