最近做项目用了很多共通的处理类,贴出来共享一下,如有不对之处,请指正,欢迎交流。
////////////////////////////////////////////////////////////////////////////////
//
// My System
// Copyright 2008-2009 My Systems Incorporated
// All Rights Reserved.
//
// NOTICE: My System permits you to use, modify, and distribute this file
// Langversion ActionScript 3.0
// playerversion Flash 9.0
// DATE: 2009-03-22 keren
// QQ: 994251681
// MSN: keren1515@hotmail.com
//
////////////////////////////////////////////////////////////////////////////////
package org.app.utils.common
{
import com.hurlant.eval.ast.NullType;
public class MyArrayUtils
{
public function MyArrayUtils(single:SingletonEnforcer)
{
if(single==null)throw new Error("This class is singletonEnforcer.");
}
////////////////////////////////////////////////////////////////////////
/**
* 把一个带有标识的字符串转换成数组
* @param String src 源串
* @param String flg 标识
*
* @return Array 数组
*/
public static function toArray(src:String, flg:String):Array{
return src.split(flg);
}
////////////////////////////////////////////////////////////////////////
/**
* 把新元素加入到数组中
* @param Array target 要被操作的数组
* @param boolean flg 添加的位置,true:在尾部 false:在头部
* @param newItems 新的元素(一个或多个以逗号隔开的元素,或一个数组)
* eg: "a","b","c"
*
* @return Array 数组
*/
public static function addItem(target:Array, flg:Boolean=true, ... newItems):Array{
if(flg){//在array的尾部添加
target.push(newItems);
}else{//在头部加
target.unshift(newItems);
}
return target;
}
/**
* 把新元素加入到数组中的指定位置后面
* @param Array target 要被操作的数组
* @param boolean startIndex 添加的位置
* @param newItems 新的元素(一个或多个以逗号隔开的元素,或一个数组)
*
* @return Array 数组
*/
public static function addItemByIndex(target:Array, startIndex:int=0, ... newItems):Array{
var length:int = target.length;
if(startIndex>length){
//throw new Error("添加的位置大于数组的长度,请重新确认!");
startIndex = length-1;
}
return target.splice(startIndex,0,newItems);
}
////////////////////////////////////////////////////////////////////////
/**
* 删除数组中的头或尾元素
* @param Array target 要被操作的数组
* @param boolean flg 删除的位置,true:在尾部 false:在头部
*
* @return Array 数组
*/
public static function dropItem(target:Array, flg:Boolean=true):Array{
if(flg){//在array的尾部删除 --实现后进先出
target.pop();
}else{//在头部删除
target.unshift();
}
return target;
}
/**
* [指定的位置先删除后插入]
* 删除数组中指定位置的元素,并在指定的位置插入新的元素
* @param Array target 要被操作的数组
* @param startIndex 起始位置,其后一个元素将开始被删除
* @param deleteCount 删除的个数
* @param newItems 新元素
*
* @return Array 数组
*/
public static function dropItemByIndex(target:Array,
startIndex:int=0, deleteCount:uint=0, ... newItems):Array{
var length:int = target.length;
if(startIndex>length){
throw new Error("删除的位置大于数组的长度,请重新确认!");
//startIndex = length-1;
}
//从startIndex到结尾还有多少个元素
var leave:int = length-1-startIndex;
if(deleteCount>leave){
deleteCount = leave;
}
if(values == null){
return target.splice(startIndex, delCount);
}
return target.splice(startIndex, delCount, newItems);
}
////////////////////////////////////////////////////////////////////////
/**
* 在数组的最后新加一个元素
*
*/
public static function append(target:Array, newItem:*):Array{
target[target.length]=newItem;
return target;
}
/**
* 清空某个数组元素的内容
*
*/
public static function empityItem(target:Array, index:int):Array{
delete(target[index]);//只是删除该元素的内容,把内容改成undefined
return target;
}
////////////////////////////////////////////////////////////////////////
/**
* 重新給数组设置长度
* @param target 目标数组
* @param newSize 新的长度
*
* @return Array
*/
public static function resize(target:Array, newSize:uint):Array{
var length:int = target.length;
if(newSize > length){//是在放大
//除了最后一个元素,其他的元素值都是 undefined
target[newSize] = "";
}
else{//截去尾部
target.length = newSize;
}
return target;
}
////////////////////////////////////////////////////////////////////////
//?????????????????????????
public static function findMatchIndex(target:Array,
search:String,startIndex:int=0,
fullMatch:Boolean=false):int{
return null;
}
//?????????????????????????
public static function findMatchItem(target:Array,
search:String,startIndex:int=0,
fullMatch:Boolean=false):Object{
return null;
}
////////////////////////////////////////////////////////////////////////
/**
* 连接数组成字符串
*/
public static function join(target:Array, seg:String=","):String{
return target.join(seg);
}
////////////////////////////////////////////////////////////////////////
/**
* 连接多个数组成一个新数组
* @param target 目标数组
* @param args 连接对象
*
* @return Array 新的数组
*/
public static function link(target:Array, ... args):Array{
return target.concat(args);
}
////////////////////////////////////////////////////////////////////////
/**
* 排序数组元素,默认是按照ASCII码的升序来排序的.
* 参数有:
* CASEINSENSITIVE:忽略大小写
* DESCENDING:倒序排列
* UNIQUESORT:如果元素中有相同的元素,就停止排序
* NUMBERIC:采用数字的ASCII码进行排序
* 以上这些参数可以整合,如:Array.CASEINSENSITIVE|Array.DESCENDING,
* 使用“|”竖线连接多个排序常量。
*/
public static function sort(target:Array,... args):Array{
return target.sort(args);
}
////////////////////////////////////////////////////////////////////////
/**
* 按照关键字排序,通常该数组里面放的是josn对象,然后按照josn对象的key进行排序,
* eg:Array xx;
* xx.push({key1:1,key2:2});
*
* xx.sortOn(key1); or xx.sortOn([key1,key2]);
*
* 格式:Array.sortOn([关键字1|关键字2|...],[排序常量1|排序常量2|...]);
* 或
* Array.sortOn(关键字,排序常量1|排序常量2|...);
*/
public static function sortOn(target:Array,
fieldName:Object,options:Object = null):Array{
return target.sortOn(fieldName,options);
}
////////////////////////////////////////////////////////////////////////
/**
* 实现自定义排序,传入排序函数即可。
* eg:
* function 函数名(a:数据类型,b:数据类型):int{
* if(a排在b后的条件){
* return 1;
* }else if(a排在b前的条件){
* return -1;
* }else{
* return 0;
* }
* }
*
*/
public static function sortBySelfFunction(target:Array,func:Function):Array{
return target.sort(func);
}
////////////////////////////////////////////////////////////////////////
/**
* 取得数组中某个最大和最小的元素值
*/
public static function getItem(target:Array, flg:Boolean=false):Object{
target.sort(Array.NUMERIC);
if(flg){//取得最大值
return target[target.length-1];
}else{
return target[0];
}
}
public static function getMaxItem(target:Array):Object{
return getItem(target,true);
}
public static function getMinItem(target:Array):Object{
return getItem(target,false);
}
////////////////////////////////////////////////////////////////////////
/**
* 比较2个数组,采用一个个元素对比
* @param src
* @param dest
* @param ignoreSequence 忽略数组元素的比较顺序 true:是 false:否
*
* @return true:相等 false:不相等
*/
public static function equals(src:Array, dest:Array,
ignoreSequence:Boolean=true):Boolean{
var length4src:uint = src.length;
var length4dest:uint = dest.length;
if(length4src != length4dest)return false;
for(var i:int=0;i<length4src;i++){
if(ignoreSequence){
var flg:Boolean = false;
for(var k:int=0;k<length4dest;k++){
if(src[i] == dest[k]){
flg = true;
break;
}
}
if(!flg)return false;
}else{
if(src[i] != dest[i])return false;
}
}
return true;
}
////////////////////////////////////////////////////////////////////////
/**
* 复制数组,如果是深度复制,那么将创建新的数组实例,否则指向同一个实例,其中一个改变
* 将影响另外一个数组。
* @param src
* @param deepClone 深度复制, true:是 false:否,是表示新的数组实例。
*
* @return Array
*/
public static function clone(src:Array,deepClone:Boolean=true):Array{
var newArr:Array = null;
if(deepClone){
newArr = new Array(src.length);
for(var i:int = 0;i<src.length;i++){
newArr[i]=src[i];
}
}else{
newArr = src;
}
return newArr;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
}//end class
}//end package
class SingletonEnforcer {}