Какой самый простой способ поменять элементы внутри массива (Actionscript 2.0) - PullRequest
1 голос
/ 17 марта 2010

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

Исходный массив = [a, b, c, d, 1,2,3,4]

Я хочу достичь - [a, 1, b, 2, c, 3, d, 4]

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

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

1 Ответ

3 голосов
/ 17 марта 2010
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
...