Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.12.2012, 15:54
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 1  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
По умолчанию Как переместить произвольный элемент массива в конец?

Здравствуйте. Помогите, пожалуйста. Я написал такой, который позволяет перемещать произвольный элемент массива в конец. Но меня интересует, есть ли возможность упростить мой код или, может быть, существует команда, которая позволяет сделать тоже самое, но с помощью одной строки. Большое спасибо.

Код AS3:
//Цель: изменение индекса элемента массива — с одного места (допустим: 1) в другое (в конец) (Другими словами: перемещение произвольного элемента массива в конец).
//Определяю массив:
var array:Array = [1,2,3,4,5];
 
//Вывожу значение массива:
trace(array);//trace: 1,2,3,4,5
 
 
//Определяю объект:
var object:Object = [];
//Изменяю значение объекта на произвольный элемент массива:
object = array[0];
//Удаляю произвольный элемент массива (тот, который стал в качестве значения object:
array.splice(0,1);
//Добавляю значение object в массив:
array.push(object);
//Очищаю значение object:
object = null;
 
//Вывожу значение массива:
trace(array);//trace: 2,3,4,5,1

Старый 15.12.2012, 16:06
am_devcorp вне форума Посмотреть профиль Отправить личное сообщение для am_devcorp Найти все сообщения от am_devcorp
  № 2  
Ответить с цитированием
am_devcorp
 
Аватар для am_devcorp

Регистрация: Jan 2012
Адрес: (0;0;0) относительно меня
Сообщений: 82
Отправить сообщение для am_devcorp с помощью Skype™
Ну еще проще — в одну строчку
Код AS3:
var array:Array = [1,2,3,4,5];
array.push(array.splice(0,1)[0]);
Можно и без [0] в конце, но я не знаю почему
__________________
cats are supreme beings

Старый 15.12.2012, 16:38
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от am_devcorp Посмотреть сообщение
Ну еще проще — в одну строчку
Код AS3:
var array:Array = [1,2,3,4,5];
array.push(array.splice(0,1)[0]);
Можно и без [0] в конце, но я не знаю почему
splice () возращает массив, поэтому без [0] в конце, последним элементом в массиве станет одноэлементный массив.
То есть, массив [1,2,3,4,5], если из него убрать 3 и поместить в конец, станет [1,2,4,5,[3]]. но трейс выдаст 1,2,4,5,3, что ошибочно даст впечатление, что [0] не нужен.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 15.12.2012, 16:50
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
//Определяю объект:
var object:Object = [];
Для чего вы тут массив присваиваете?

Цитата:
Можно и без [0] в конце
Если использовать apply().
Код AS3:
array.push.apply(null, array.splice(0,1));

Старый 15.12.2012, 16:52
am_devcorp вне форума Посмотреть профиль Отправить личное сообщение для am_devcorp Найти все сообщения от am_devcorp
  № 5  
Ответить с цитированием
am_devcorp
 
Аватар для am_devcorp

Регистрация: Jan 2012
Адрес: (0;0;0) относительно меня
Сообщений: 82
Отправить сообщение для am_devcorp с помощью Skype™
Цитата:
Сообщение от iNils Посмотреть сообщение
но трейс выдаст 1,2,4,5,3, что ошибочно даст впечатление, что [0] не нужен.
Я попался. Жаль конечно, что трейс не может адекватно выводить значения.
Dip52: [0] нужен и очень даже нужен!
__________________
cats are supreme beings

Старый 15.12.2012, 17:59
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Только вот фишка в том, что splice не смотря на то, что должна модифицировать массив, в этом случае, выделит память под массив по-новой, иногда это не принципилаьно, но иногда лучше так не делать (если массив большой). Аналогично динамическое наращивание массива скорее всего приведет к выделению памяти и копированию массива. Так что, если массив очень большой, а время не особо критично, то ИМО, лучше просто сместить все оставшиеся элементы на единичку влево, а последний заменить тем, который нужно переставить.

Код AS3:
package
{
    import flash.display.Sprite;
 
    public class RotateShiftExample extends Sprite
    {
        public function RotateShiftExample()
        {
            super();
            // 1,2,4,5,3
            trace(rotateShift([1, 2, 3, 4, 5], 2));
        }
 
        private static function rotateShift(
            array:Array, index:int):Array
        {
            var limit:int = array.length - 1;
            var element:Object = array[index];
            while (index < limit)
                array[index] = array[++index];
            array[index] = element;
            return array;
        }
    }
}
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 15.12.2012 в 18:11.
Старый 15.12.2012, 17:59
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от am_devcorp Посмотреть сообщение
Я попался. Жаль конечно, что трейс не может адекватно выводить значения.
А трейс тут не причем, это у Array такие данные метод toString () выдает.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 17.12.2012, 02:54
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 8  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
Цитата:
Сообщение от udaaff Посмотреть сообщение
Для чего вы тут массив присваиваете?
А чем отличается var object:Object = new Object(); от var object:Object; ? В первом случае он до конца определен? Если да, то я представлял, что [] и есть конечное определение объекта. Если я неправильно понимаю, помогите, пожалуйста, понять правильно. Спасибо.

Старый 17.12.2012, 03:06
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
new Object() или {} - это создание объекта.
new Array() или [] - создание массива.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 17.12.2012, 10:09
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 10  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
А чем отличается var object:Object = new Object(); от var object:Object; ? В первом случае он до конца определен?
Не совсем. В первом случае он определен, а во втором нет. Это всего лишь объявление переменной и не более.

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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