![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Доброго времени суток.
Есть массив, вроде такого: var arr:Array = new Array(); arr[-4] = "one"; arr[-2] = "two"; arr[-1] = "three"; arr[5] = "four"; arr[7] = "five"; arr[8] = "six"; arr[10] = "seven"; Мне нужно достать первый элемент с конца, который не undefined, и его индекс. Но не знаю как получить индекс этого элемента. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
Быдлокод же. Использовать тогда уж надо или Object/Dictionary или тупо сместить точку отчета, чтобы небыло отрицательных элементов. Типа массив [-50;50] => [0,100], arrayIndex = realIndex + 50.
__________________
мой пустой блог Последний раз редактировалось iNils; 11.01.2013 в 20:49. |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Да, сори, невнимательный
![]() Но проблема осталась, пока единственная идея - взять примерный минимальный индекс и в цикле делать проверку на undefined. Цитата:
Насчёт Object - как я узнаю какой элемент последний? С Dictionary пока не работал, если найдётся минимальный примерчик решения, буду очень благодарен ![]() |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
Цитата:
Цитата:
Ну если уж все так плохо, то надо брать Object и расширять его своими функциями,типа insert, push, pop, getLength() и т.д.
__________________
мой пустой блог |
|
|||||
|
Modus ponens
|
Можно использовать функцию, которая трансформирует индекс в реальный индекс в массиве, тогда смещение становится "виртуальным", т.е. мы только двигаем нулевой индекс, (но не элемент по нулевому индексу), тогда функция "трансформатор" будет всегда читать нулевой индекс и прибавлять / отнимать чтобы получить реальный индекс.
Например, алгоритм записи по индексу: 1. Проверить вышли ли мы за пределы массива (сложить индекс с реальным индексом нулевого элемента, если результат меньше 0 или больше реальной длины массива - то вышли). 2. Если вышли - посчитать разницу на сколько вышли, 2.а. прибавить разницу к нулевому индексу, 2.б. прибавить необходимое количество пустых элементов к массиву. 3. заменить элемент по индексу на новый. Другой вариант - использовать два массива. Считать индексы во втором массиве отрицательными.
__________________
Hell is the possibility of sanity |
|
|||||
|
Я бы использовал связанный список + хэш. В хэше бы хранил пары "индекс - элемент", в связааном списке - сами элементы в текущей последовательности. При таком раскладе получаем быструю вставку до/после определенного элемента + доступ по индексам. Пример приводить не буду =)
__________________
...вселенская грусть |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|