数组工具类

package com.devil.utils
{
 import flash.utils.Dictionary;

 /**
  * 数组工具类
  * @author     devil
  * @version    V20110219
  * @createTime 2010-7-19
  * @updateTime 2010-09-19     整理
   * @updateTime 2010-10-23     填加【clone(),getKeyArrayByDic(),getValueArrayByDic()】
  * @updateTime 2011-02-19     填加【toArray1()】
  * @qq         346443480
  * @email      sych_1982 @ 163.com
  */ 
 public class ArrayUtil
 {
  
  /**
   * 计算由数字元素组成的数组的元素平均值。
   * @param arr  源数组。
   * @return     平均值。
   *
   */  
  public static function avg(arr:Array):Number
  {
   return sum(arr) / arr.length;
  }

  
  /**
   * 判断一个数组中是否包含指定的元素。
   * @param arr          源数组。
   * @param element      判断是否存在于源数组中的元素。
   * @return             如果一个数组中包含指定的元素,返回true.
   *
   */  
  public static function contains(arr:Array,element:Object):Boolean
  {
   return arr.indexOf(element) > -1;
  }
  
  /**
   * 删除数组内重复的元素,源数组不改变.
   * <p>生成的数组的顺序是按源数组内元素从左到右出现顺序为准.</p>
   * @param arr 要删除重复元素的数组。
   * @return    删除重复元素后的源数组的一份拷贝。
   *
   */  
  public static function createUniqueCopy(arr:Array):Array
  {
   var result:Array = [];
   var len:int = arr.length;
   for(var i:uint = 0; i < len; i++)
   {
    if(!contains(result,arr[i]))result.push(arr[i]);
   }
   return result;
  }
  
  /**
   * 对数组中的每一个元素执行相同的操作.
   * <p>外理的方法需要传入数组的元素做为参数.</p>
   * @param arr    源数组
   * @param f      对元素执行的操作,该参数引用的方法需要传入数组元素做为参数。
   *
   */  
  public static function eachFunction(arr:Array,f:Function):void
  {
   for each(var element:Object in arr)
   {
    f(element);
   }
  }
  
  /**
   * 返回二维数组对应的值。
   * @param i    一维索引
   * @param j    二维索引
   * @param arr  源数组。
   * @return     返回值。
   *
   */  
  public static function getElement(i:int,j:int,arr:Array):Object
  {
   return arr[i][j];
  }
  
  /**
   * 获得对象数组中某个键的所有值
   * @param arr       源数组
   * @param key       健值
   * @return    数组中所有与健对应的值组成的新数组
   * @example
   * <listing version = "3.0">
   *   getKeyValues([{x:0,y:0},{x:-2,y:4},{x:4,y:2}],"x") //[0,-2,4]
   * </listing>
   */ 
  public static function getKeyValues(arr:Array,key:Object):Array
  {
   var values:Array = [];
   for each(var o:Object in arr)
   {
    values.push(o[key]);
   }
   return values;
  }
  
  /**
   * 判断两个数组是否相等(对应位置的对应元素相等)。
   * @param arr1 源数组1。
   * @param arr2 源数组2。
   * @return     如果两个数组相等,返回true.
   *
   */  
  public static function isEqual(arr1:Array,arr2:Array):Boolean
  {
   if(arr1.length != arr2.length)return false;
   var len:int = arr1.length;
   for(var i:int = 0; i < len; i ++)
   {
    if(arr1[i] != arr2[i])return false;
   }
   return true;
  }
  
  /**
   * 在数值数组内小于value的元素个数。
   * @param arr     源数组。
   * @param value   要判断的值。
   * @return        小于value的元素个数。
   *
   */  
  public static function lessThenValueNum(arr:Array,value:int):int
  {
   arr.sort(Array.NUMERIC);
   if(int(arr[0]) > value) return 0;
   if(int(arr[arr.length - 1]) < value) return arr.length;
   var middleIndex:int = (arr.length - 1) / 2;
   if(value < arr[middleIndex])
   {
    while(middleIndex >= 0)
    {
     if(value > arr[middleIndex]) return middleIndex + 1;
     middleIndex --;
    }
   }
   else if(value > arr[middleIndex])
   {
    while(middleIndex < arr.length)
    {
     if(value < arr[middleIndex]) return middleIndex;
     middleIndex ++;
    }
   }
   return middleIndex;
  }
  
  /**
   * 从数组中删除指定的元素.并返回删除的数量,可以选择删除第一个出现的或者数组内所有的元素.
   * @param arr       要删除元素的数组。
   * @param element   要删除的元素。
   * @param all       [可选参数]如果true,则删除数组中所有的与该元素相等的元素,否则只删除一个且是最靠前的元素。
   * @return          删除的元素的个数。
   * 
   */  
  public static function remove(arr:Array,element:Object,all:Boolean = false):int
  {
   var count:int = 0;
   var index:int = arr.indexOf(element);
   if(all)
   {
    while(index > -1)
    {
     arr.splice(index,1);
     count ++;
     index = arr.indexOf(element);
    }
   }
   else
   {
    if(index > -1)
    {
     arr.splice(index,1);
     count ++;
    }    
   }

   return count;
  }
  
  /**
   * 删除数组中某一指定的索引[不包括指定的索引]之后的元素,如果index小于或者等于-1,则清空数组,改变源数组.
   * @param arr    要删除元素的数组。
   * @param index  指定的索引位置。
   * @return       从原数组中删除的元素的组成的数组。
   */  
  public static function removeAllBehindSomeIndex(arr:Array,index:int):Array
  {
   var len:int = arr.length;
   index = MathUtil.clamp(-1,len - 1,index);
   return arr.splice(index + 1,len - index);
  }
  
  /**
   * 计算数组内所有的元素的相加的结果。
   * @param arr  包含计算相加数字元素的数组。
   * @return     数组内数字元素相加后的结果。
   */  
  public static function sum(arr:Array):Number
  {
   var result:Number = 0;
   for each(var element:Number in arr)
   {
    result += element;
   }
   return result;
  }  
  
  /**
   * 随机获得数组中的一个元素.
   * @param array  源数组.
   * @return       随机元素值.
   *
   */  
  public static function getRndElement(array:Array):Object
  {
   return array[int(array.length * Math.random())];
  }
  
  /**
   * 复制数组的一份拷贝,针对一维数组.
   * @param array 源数组。
   * @return      源数组的拷贝。
   */  
  public static function clone(array:Array):Array
  {
   return array.concat();
  }  
  
  /**
   * 将<code>Dictionary</code>类型的值转成数组.
   * @param dic 要转化数组的字典数组.
   * @return  由<code>Dictionary</code>类型的值构成的数组.
   */  
  public static function getValueArrayByDic(dic:Dictionary):Array
  {
   var result:Array = [];
   for each(var value:Object in dic)
   {
    result.push(value);
   }
   return result;
  }
  
  /**
   * 将<code>Dictionary</code>类型的键转成数组.
   * @param dic 要转化数组的字典数组.
   * @return  由<code>Dictionary</code>类型的键构成的数组.
   */  
  public static function getKeyArrayByDic(dic:Dictionary):Array
  {
   var result:Array = [];
   for (var value:Object in dic)
   {
    result.push(value);
   }
   return result;
  }
  
  /**
   * 将二维数组,转成一个一维的数组.把二维数组的值,放到一个新的一维数组内。
   * @param arr2  指定的二维数组。
   * @return      二维转化后的一维数组。
   */  
  public static function toArray1(arr2:Array):Array
  {
   var result:Array = [];
   var row:int = arr2.length;
   var len:int;
   for(var i:int = 0; i < row; i++)
   {
    len = arr2[i].length;
    for(var j:int = 0; j < len;j ++)
    {
     result.push(arr2[i][j]);
    }
   }
   return result;
  }
 }
}

posted on 2011-10-09 00:48  devil?  阅读(284)  评论(0)    收藏  举报

导航