【问题标题】:What is the easiest way to swap items inside an array (Actionscript 2.0)交换数组内项目的最简单方法是什么(Actionscript 2.0)
【发布时间】:2010-03-17 10:49:56
【问题描述】:

我有一个数组,我想根据数组中某个值的值对其进行排序。我想要对其进行排序的方式是在整个结果数组中均匀分布我正在搜索的值。例如 -

原始数组 = [a,b,c,d,1,2,3,4]

我要实现-[a,1,b,2,c,3,d,4]

我可以计算出何时插入数字(项目总数/数字数量)= 2,因此每个第二个项目都应该是一个数字。

进行此类排序最简单、最有效的方法是什么?

【问题讨论】:

    标签: flash arrays actionscript-2 sorting


    【解决方案1】:
    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
    

    【讨论】:

    • 谢谢,但如果不是一半怎么办,例如,如果我有一个数组 - [a,b,c,d,e,f,1,2] 我想要 [a, b,1,c,d,2,e,f]
    猜你喜欢
    • 2016-08-16
    • 2017-08-23
    • 1970-01-01
    • 2010-12-23
    • 2012-02-05
    • 2021-11-11
    相关资源
    最近更新 更多