Просмотр полной версии : Массив. Как поменять элементы местами?
mihael_p
02.05.2013, 14:14
Подскажите пожалуйста, как в массиве поменять местами элементы? Допустим из массива (1,2,3,4,5) получить массив (1,5,3,4,2)?
Задачу на дом задали ? :)
Проходишь по своему массиву циклом и каждый элемент по порядку меняешь местами со случайным другим элементом. В конце у тебя получиться массив со случайно расположенными элементами.
Получение случайного индекса для замены:
int(Math.random()*array.length);
Есть готовое решение (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, спасибо огромное - то, что нужно!
Задачу на дом задали ? :)
Проходишь по своему массиву циклом и каждый элемент по порядку меняешь местами со случайным другим элементом. В конце у тебя получиться массив со случайно расположенными элементами.
Получение случайного индекса для замены:
int(Math.random()*array.length);
Плохой метод: если длина массива равна 10, следовательно индекс у последнего элемента будет равен 9. При получение элемента с 10 индексом...
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
если длина массива 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]
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.