Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Массив. Как поменять элементы местами? (http://www.flasher.ru/forum/showthread.php?t=198690)

mihael_p 02.05.2013 14:14

Массив. Как поменять элементы местами?
 
Подскажите пожалуйста, как в массиве поменять местами элементы? Допустим из массива (1,2,3,4,5) получить массив (1,5,3,4,2)?

Tails 02.05.2013 14:51

Задачу на дом задали ? :)

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

Получение случайного индекса для замены:
Код AS3:

int(Math.random()*array.length);


bav 02.05.2013 14:52

Есть готовое решение. Tails, насколько я понял, тут нужно поменять местами элементы с индексами 1 и 4.
Код AS3:

var myArray:Array = ["flash", "flex", "html", "dhtml", "javascript"];
Array.prototype.swap = function(fromIndex:int, toIndex:int):void {
  var temp:* = this[toIndex];
  this[toIndex] = this[fromIndex];
  this[fromIndex] = temp;
}
 
//swaping first and second index of a array
myArray.swap(0,1);
 
for (var i:Number = 0; i < myArray.length; i++) {
  trace(myArray[i]);
}


mihael_p 02.05.2013 15:06

bav, спасибо огромное - то, что нужно!

Dip52 03.05.2013 18:48

Цитата:

Сообщение от Tails (Сообщение 1131998)
Задачу на дом задали ? :)

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

Получение случайного индекса для замены:
Код AS3:

int(Math.random()*array.length);


Плохой метод: если длина массива равна 10, следовательно индекс у последнего элемента будет равен 9. При получение элемента с 10 индексом...

Tails 03.05.2013 19:03

Dip52,
Метод Math.random() возвращает число от 0 до 0.9999999, Еденицу он не вернёт. Следовательно - результатом всегда будет индекс не более length-1.

Код AS3:

var arrayLength:uint = 10;
for (var i:uint = 0; i<15; i++){
        trace('random index: ' + int(Math.random() * arrayLength));
}

Код:

random index: 6
random index: 8
random index: 0
random index: 3
random index: 0
random index: 3
random index: 4
random index: 9
random index: 7
random index: 5
random index: 9
random index: 8
random index: 8
random index: 6
random index: 0


Sync 03.05.2013 19:06

если длина массива 10, то последний индекс - 9.

PsychoTech 28.12.2014 23:51

если в друг кому понадобиться крутить элементы вот код. я его лично использую для контроля вращения нескольких элементов вокруг общей точки чтобы они перекрывали друг друга в нужном порядке.
Если немного дополнить код то можно получить ответ и на вопрос темы, не нагруженный сложностью для прочтения. ИМХО
Код AS3:

var massive: array = [1, 2, 3, 4, 5];
massive.push(massive.shift()); // [2, 3, 4, 5, 1]



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

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