利用哈稀表查找的多关键字型对象数组
/**
* 利用哈稀表查找的多关键字型对象数组
* @author fanflash.cn
* @version 0.1
*/
class org.fanflash.unite.ArrayList extends Array{
public var KeyToIDList:Array //关键标识到ID的索引
public var IDToKeyList:Array //ID到关键标识的索引
public function ArrayList() {
super();
this.IDToKeyList=new Array();
this.KeyToIDList=new Array();
}
/*
* 增加标识符
* index:内容的索引
* 除第一个外的参数:要外挂的ID
*/
public function addID(index:Number){
arguments.shift();
this.IDToKey(index,arguments)
}
/*
* 增加对象
* obj:要增加的内容
* 除第一个外的参数:要外挂的ID
*/
public function addItem(obj:Object):Number{
arguments.shift();
var index:Number=this.push(obj)-1
this.IDToKey(index,arguments)
return index;
}
/*
* 得到对象
* id:任何跟这个ID有关的字符串
*/
public function getItem(id:Object):Object{
var typeStr:String=typeof(id)
if(typeStr=="number"){
return this[id];
}
var index:Number=this.KeyToIDList[id]
return this[index]
}
/*
* 删除对象
* id:任何跟这个ID有关的字符串
*/
public function deleteItem(id:Object):Number{
var typeStr:String=typeof(id)
if(typeStr=="number"){
delete this[id]
}
//目标的索引
var index:Number=this.KeyToIDList[id]
delete this[index]
for(var i in this.IDToKeyList[index]){
delete this.KeyToIDList[this.IDToKey[index][i]]
}
delete this.IDToKey[index]
return index;
}
/*
* 关联ID和KEY的关系
*/
private function IDToKey(index:Number,keyList:Array){
for(var i in keyList){
this.KeyToIDList[keyList[i]]=index
}
this.IDToKey[index]=keyList;
}
}
//大家使用的时候要注意命名空间,使用方法:
//测试关键字索引数组
var t:ArrayList=new ArrayList();
t.addItem("welcome to fanflash.cn","a","t","s");
trace(t.getItem("a"))
这是输出面板显示的是第一个参数的值,这个类的作用就在于此,不论你getItem("a"),还getItem("b"),都可以输出第一个值
addItem这个方法第一个参数是要增加的对象,后面的参数是不限个数的,可以自己写上想要关联的关键字
这关键字和内容的映射是通过数据实现的,而查找也是利用flash自己的哈稀表查找,所以速度很快,不是使用for这样的方法可以比的上的.