Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Возможно ли, не имея ссылки на объект, получить этот объект из массива (http://www.flasher.ru/forum/showthread.php?t=176634)

HardCoder 14.03.2012 22:13

Возможно ли, не имея ссылки на объект, получить этот объект из массива
 
Здравствуйте. Есть вектор:
Код AS3:

var myObjects:Vector.<Object> = new <Object> [new Object4(), new Object2(), new Object8()];

Заранее известно, что в этом векторе все типы элементов разные (то есть не может быть 2 элемента с типом Object2). Мне необходимо получить элемент массива с типом Object2 (то есть 2-й элемент). Я - разработчик знаю что один экземпляр Object2 точно есть в этом массиве. Как заставить программу узнать это?
Исходные данные: тип искомого объекта (класс Object2) и сам массив с этим объектом. Больше у нас ничего нет. Подскажите, пожалуйста, возможно ли программно найти этот объект в массиве по его классу?

Добавлено через 1 минуту
PS: Может лучше использовать Dictionary?

Добавлено через 6 минут
Во я затупил! Можно пройтись по массиву и у каждого элемента спросить: он is Object2, или нет. Но может есть более продвинутые решения?

anmelegov 14.03.2012 22:28

Код AS3:

for each (var object:Object in myObjects) {
  if (object is Object2) {
    break;
    /// поиск окончен
  }
}

Добавлено через 31 секунду
блин не дочитал до конца =)

HardCoder 14.03.2012 22:38

anmelegov, спасибо, что откликнулся. Об этом и сам подумываю. Только вот не нравится мне такой вариант. Дело в том, что мне в разных частях проекта часто придется выдергивать то Object2, то SomeClass234 и др. И все время потрошить массив, как-то... Думал спрошу здесь, мож у кого более приятные идеи появятся.

Добавлено через 42 секунды
PS: где-то читал, что for быстрее чем for each, вот и всегда использую первый

Psycho Tiger 14.03.2012 22:39

anmelegov, поиск окончен будет после цикла for each.

anmelegov 14.03.2012 22:44

for быстрее, for each в каждой итерации будет записывать object, а запись в память всегда тормозит

Bgg 14.03.2012 23:06

Цитата:

Сообщение от anmelegov (Сообщение 1069073)
for быстрее, for each в каждой итерации будет записывать object, а запись в память всегда тормозит

Проверяли? Наверно на 100 млн. объектах быстрее?

anmelegov 14.03.2012 23:09

Цитата:

Сообщение от Bgg (Сообщение 1069084)
Проверяли? Наверно на 100 млн. объектах быстрее?

не проверял... да скорее всего разница мало ощутима =)

Inet_PC 14.03.2012 23:50

indexOf, не? Не дочитал, сори. filter как вариант.

Aquahawk 14.03.2012 23:53

я бы посоветовал вам сделать Dictionary если уж так важно имеет отношение Class->object. Если вам нужен именно массив чтоб им ещё как-то пользоваться оставьте его, а параллельно ему сделайте Dictionary где ключом будет класс а значением объект.

Добавлено через 1 минуту
Это в случае если ваши классы инстанцируются не один раз, а если один раз то можно вообще классического синглтона замутить со статическим getInstance() который один раз создаст объект и сохранит его в статическом поле, в потом его и будет возвращать.

HardCoder 15.03.2012 00:08

Да - отношение именно Class->object. Не особо важно, массив это или еще что-то - главное список объектов, которые можно вытащить. А вот с синглтоном немного не понятно... У меня сейчас есть статический вектор с экземплярами. Он не меняется никогда...


Часовой пояс GMT +4, время: 05:59.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.