PDA

Просмотр полной версии : Удаление элемента массива по имени.


HorusWM
01.06.2011, 14:34
Доброго дня, столкнулся с небольшой задачкой и никак не могу ее решить.
У меня массив info_list, который содержит ссылки на клипы. Каждый клип имеет уникальное имя. В определенные моменты я удаляю определенные клипы (с этим проблем нет через перебор for), но вот как мне найти нужную ссылку на клип в массиве, что бы удалить ее? Ведь индекс удаляемого клипа не известен, только его имя, соответственно ни splice, ни shift, ни pop не работают. А так массив постоянно заполняется, когда я создаю новые клипы и фпс заметно падает. Пробовал через перебор For и сравнение имени у ссылки на клип с передаваемым, а затем info_list.splice(0, 1, info_list[temp]) - не работает, удаляется только ссылка на 1й клип, а я могу удалять сразу несколько, пробовал просто info_list.splice(info_list[temp], 1) - так вообще абы какие клипы удаляются.
Пожалуйста, подскажите кто-нибудь.

dark256
01.06.2011, 14:47
в удаляемый клип, при его создании, записывайте ссылку на элемент массива.

мой_клип.ссылка = номер_элемента_массива

Перед удалением клипа - удаляйте элемент по ссылке.
К примеру.

HorusWM
01.06.2011, 14:52
Благодарю за отклик, можно было сделать так, но нашел другой выход) Весь вечер вчера голову ломал, сразу не дошло: перебор делать через цикл for (i=0.. и далее сравнивать имя искомого индекса, а я перебирал только по самим ссылка в массиве. Задача решена, но всеравно спасибо, dark.

dark256
01.06.2011, 14:56
ну в общем да, для индексированных массивов счетный цикл самое то :)
for in имеет смысл применять, если индекс массива - литерал.
Типа имя_массива["Возраст"] = 666
:)

HorusWM
01.06.2011, 15:00
Вы имеете ввиду, если в массиве хранятся не ссылки на инстансы, а просто строковые значения?

dark256
01.06.2011, 15:09
Нет, если индекс элемента массива выглядит не так:
arr[0]
arr[1]
arr[2]

А так:
arr["Vasia"]
arr["Katia"]
arr["iNills"]

HorusWM
01.06.2011, 15:13
но это всеравно могут быть ссылки на инстансы? если да, то как добавлять тогда таким образом индексы, push("Vasya") ?

dark256
01.06.2011, 15:17
в самом элементе хранить можно все что угодно.
а push.... я обычно добавляю так:

array[array.length] = очередные_данные_какие-то_любые :)

Добавляется в конец и нормально увеличивается размер.
В вашем случае ничего не надо добавлять, по сути.

arr["Vasia"] = 100500 - это само по себе создаст в массиве элемент с таким индексом :)

HorusWM
01.06.2011, 15:20
аа, понял.. это удобно для сортировки потом, но это, получается, подходит только для заполнения вручную? скажем, если эл-тов очень много (ну, скажем, уже больше десятка), то процесс не автоматизировать?

dark256
01.06.2011, 16:07
Смотря откуда вы берете данные.
Ну и литерал собссно тоже можно генерить как угодно.
Например из индексов символов собирать строки.

HorusWM
01.06.2011, 16:14
В моем случае данные идут извне - из 3д движка, к которому прикручен флэшевый интерфейс, в самом движке я никак не могу менять имена объектов, они генерируются сами, при создании объекта на сцене. Поэтому, чтобы управлять отрисовкой информации по каждому из них, я могу передавать только имя каждого объекта и значения каких-то параметров, и присваивать уже во флеше инстансам соответствующие имена. Как вариант, конечно, завести переменную int id для объектов в движке и работать по ней, но выходит лишний код с присваиваниями, передачами и проверками, поэтому просто использую имена.