PDA

Просмотр полной версии : Массив. Как поменять элементы местами?


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

Tails
02.05.2013, 14:51
Задачу на дом задали ? :)

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

Получение случайного индекса для замены:
int(Math.random()*array.length);

bav
02.05.2013, 14:52
Есть готовое решение (http://flash-anni.blogspot.ru/2011/04/swapping-two-values-of-array.html). Tails, насколько я понял, тут нужно поменять местами элементы с индексами 1 и 4.
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
Задачу на дом задали ? :)

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

Получение случайного индекса для замены:
int(Math.random()*array.length);

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

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

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
если в друг кому понадобиться крутить элементы вот код. я его лично использую для контроля вращения нескольких элементов вокруг общей точки чтобы они перекрывали друг друга в нужном порядке.
Если немного дополнить код то можно получить ответ и на вопрос темы, не нагруженный сложностью для прочтения. ИМХО

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