package com.youbt.utils { import com.youbt.core.rf_internal; import flash.utils.Dictionary; use namespace rf_internal; /** * 维护即有字典又有顺序的数据,外部修改数据只能调用方法,不允许直接修改里面的数据 * @author crl * */ public class ArraySet { private var _isListData:Boolean=true; private var list:Array=[]; private var dic:Dictionary=new Dictionary(true); /** * * @param isListData list里面存储的是data列表还是key列表 * */ public function ArraySet(isListData:Boolean=true) { _isListData=isListData; } public function set(key:*,data:*):void{ if(dic[key]){ remove(key); } if(data){ dic[key]=data; if(_isListData){ list.push(data); }else{ list.push(key); } } } public function remove(key:*):* { var data:*=dic[key]; if(data){ dic[key]=null; delete dic[key]; var index:int; if(_isListData){ index=list.indexOf(data); }else{ index=list.indexOf(key); } if(index==-1){ throw new Error("数据结构有问题"); } //必须有; list.splice(index,1); } return data; } /** * 以key来取它所在的索引; * @param key * @return * */ public function indexOfKey(key:*):int{ if(_isListData==false){ return list.indexOf(key); } return list.indexOf(dic[key]); } /** * 以data来取它所在的索引; * @param data * @return * */ public function indexOfData(data:*):int{ if(_isListData){ return list.indexOf(data); } var len:int=list.length; for(var key:* in dic){ if(dic[key]==data){ return list.indexOf(key); } } return -1; } /** * 以key取得数据; * @param key * @return * */ public function get(key:*):*{ return dic[key]; } public function clear():void{ dic=new Dictionary(true); list.length=0; } public function dispose():void{ clear(); } public function get length():int{ return list.length; } /** * 取得复制的对像,这样里外的修改都不会影响原有的操作; * @return * */ public function getCloneList():Array { return list.concat(); } public function getUnsafeList():Array { return list;//.concat(); } public function getUnsafeDictionry():Dictionary { return dic; } } }