2010-03-17 2 views
1

У меня есть массив, который я хочу сортировать, основываясь на значении одного из значений в массиве. Способ, которым я хочу сортировать это, - равномерно распределить значение, которое я ищу, в течение всего результирующего массива. Например -Самый простой способ поменять элементы внутри массива (ActionScript 2.0)

исходного массива = [а, б, в, г, 1,2,3,4]

я хочу достичь - [а, 1, B, 2, с, 3, D , 4]

Я могу поработать, когда вставлять числа (общее количество/количество номеров) = 2, поэтому каждый второй элемент должен быть числом.

Что такое самый простой и эффективный способ сортировки такого типа?

ответ

3
var a = [a,b,c,d,1,2,3,4]; 
var half = a.length/2; 
var c = []; 
for(var i = 0; i < half; i++) 
{ 
    c.push(a[i]); 
    c.push(a[half + i]); 
} 
a = c; 

Общее решение:
Установите r в соответствующее значение и убедитесь, что длина массива соответствует этому значению. Например, если r является 2, отношение числа букв к числу цифр 2:1 и, следовательно, длина массива, len, должна быть кратна 3.

function mix(a:Array, r:Number):void 
{ 
    var len1 = a.length * r/(r + 1); 
    var len2 = a.length - len1; 
    var c = []; 
    for(var i = 0; i < len2; i++) 
    { 
    for(var j = 0; j < r; j++) 
     c.push(a[i * r + j]); 
    c.push(a[len1 + i]); 
    } 
    trace(c.join()); 
} 
var r = 2; //two letters per one digit 
//8 letters and 4 digits 
var a = ['a','b','c','d','e','f','g','h','1','2','3','4']; 
mix(a, r) // a,b,1,c,d,2,e,f,3,g,h,4 

r = 3; //three letters per one digit 
//9 letters and 3 digits 
a = ['a','b','c','d','e','f','g','h','i','1','2','3']; 
mix(a, r); // a,b,c,1,d,e,f,2,g,h,i,3 
+0

Спасибо, но что, если его не половина и половина, например, если у меня есть массив - [a, b, c, d, e, f, 1,2], и я хочу [a, b, 1, c, d, 2, e, f] – undefined

+0

@ undefined см. мое обновление – Amarghosh

+0

Отлично, спасибо Amarghosh. – undefined

Смежные вопросы