![]() |
Получить индекс элемента при Array::pop()
Доброго времени суток.
Есть массив, вроде такого: Код AS3:
Мне нужно достать первый элемент с конца, который не undefined, и его индекс. Но не знаю как получить индекс этого элемента. |
Шито? массив с отрицательными индексами? И что, .pop() будет нормально работать и удалять элементы по отрицательному индексу?
Код AS3:
|
Array#indexOf().
Отрицательные индексы преобразовываются в строки, в результате получается от 0 индекса и выше - индексированный массив, а от "-1" и ниже - ассоциативный. |
Быдлокод же. Использовать тогда уж надо или Object/Dictionary или тупо сместить точку отчета, чтобы небыло отрицательных элементов. Типа массив [-50;50] => [0,100], arrayIndex = realIndex + 50.
|
Да, сори, невнимательный ;)
Но проблема осталась, пока единственная идея - взять примерный минимальный индекс и в цикле делать проверку на undefined. Цитата:
Насчёт Object - как я узнаю какой элемент последний? С Dictionary пока не работал, если найдётся минимальный примерчик решения, буду очень благодарен :) |
Цитата:
Цитата:
Ну если уж все так плохо, то надо брать Object и расширять его своими функциями,типа insert, push, pop, getLength() и т.д. |
Цитата:
|
Можно использовать функцию, которая трансформирует индекс в реальный индекс в массиве, тогда смещение становится "виртуальным", т.е. мы только двигаем нулевой индекс, (но не элемент по нулевому индексу), тогда функция "трансформатор" будет всегда читать нулевой индекс и прибавлять / отнимать чтобы получить реальный индекс.
Например, алгоритм записи по индексу: 1. Проверить вышли ли мы за пределы массива (сложить индекс с реальным индексом нулевого элемента, если результат меньше 0 или больше реальной длины массива - то вышли). 2. Если вышли - посчитать разницу на сколько вышли, 2.а. прибавить разницу к нулевому индексу, 2.б. прибавить необходимое количество пустых элементов к массиву. 3. заменить элемент по индексу на новый. Другой вариант - использовать два массива. Считать индексы во втором массиве отрицательными. |
Цитата:
|
Я бы использовал связанный список + хэш. В хэше бы хранил пары "индекс - элемент", в связааном списке - сами элементы в текущей последовательности. При таком раскладе получаем быструю вставку до/после определенного элемента + доступ по индексам. Пример приводить не буду =)
|
| Часовой пояс GMT +4, время: 19:22. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.