Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Удалить элемент из массива (http://www.flasher.ru/forum/showthread.php?t=109000)

Волгоградец 05.03.2008 14:06

Удалить элемент из массива
 
Здрасьте! Мне очень стыдно, но я прошу помощи в следующей простой задаче:
Код:

var arr:Array = new Array (clip1, clip2, clip3);
Есть массив клипов. Из него нужно удалить элемент, например clip2. Сделать это нужно методом
Код:

arr.splice(k, 1);
где k - это номер элемента в массиве. Но как мне узнать какой по счету clip2? Я метод этот не вижу в хэлпе :rolleyes: .

iNils 05.03.2008 14:07

Перебором массива.

Волгоградец 05.03.2008 14:29

Спасибо, iNils. Понял. Думал может существует какой-нибудь специальный метод...

iNils 05.03.2008 14:34

Если не важен порядок элементов в массиве, то стоит обратить свой взор в сторону ассоциативного массива.

Волгоградец 05.03.2008 14:46

Порядок совершенно не важен. Про ассоциативный массив ничего не знаю. Но воспользуюсь советом и обязательно прочитаю. Спасибо!

Прочитал... Ассоциативный не подойдет, т.к. нужно будет добавлять и удалять элементы, а такой массив не поддерживает методы обычного массива, т.е. я не смогу прочитать длину, "вырезать" элемент и т.д.

Fernando Costa 05.03.2008 15:16

for .. in для перебора подходит

iNils 05.03.2008 15:43

Цитата:

Сообщение от Волгоградец
Прочитал... Ассоциативный не подойдет, т.к. нужно будет добавлять и удалять элементы, а такой массив не поддерживает методы обычного массива, т.е. я не смогу прочитать длину, "вырезать" элемент и т.д.

Ну... Все не так печально. Можно расширить массив добавив свои методы и свойства.
Пример класса
Код:

class Array2 extends Array {
        private var __len:Number = null;

        function Array2 () {
                super ();
                __len = 0;
        }
        function addItem (o:Object):Void {
                this[o] = o;
                __len++;
        }
        function removeItem (o:Object):Void {
                delete this[o];
                __len--;
        }
        public function get length ():Number {
                return __len;
        }
}

применение
Код:

var a = new Array2 ();
a.addItem ("a");
trace ("len " + a.length)
a.addItem ("b");
trace ("len " + a.length)
a.addItem (3);
trace ("len " + a.length)
trace (a["a"] + " " + a[3])
a.removeItem ("a");
trace ("len " + a.length)

результат
Цитата:

len 1
len 2
len 3
a 3
len 2

Волгоградец 05.03.2008 15:49

Все равно ассоциативный неудобно использовать - надо задавать пару имя-значения, а это лишние строчки кода. Плюс он удобен когда часто используются одни и те же значения. В моем случае динамически создаются и удаляются клипы - их достаточно много. Для каждого генерировать имя-значения - мне кажется это неправильно. Может я не в том направлении думаю?

Upd. (после прочтения поста #7):
Вот это да, iNils, ты крут! Я буду юзать этот массив. Назову его InilsArray...

iNils 05.03.2008 15:54

Где вы видели в моем примере пару имя/значение?
Только само значение, которое класс также использует как имя.

Волгоградец 05.03.2008 16:19

Это я писал до того, как прочитал ваш пример. Спасибо!


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

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