字典使用strict equals(===)进行密钥比较,如何更改比较,所以我可以使用我的标准进行比较,例如,我有一个名为Student的类:
class Student{
var id:int;
var name:String;
var age:int;
//constructor
Student(id:int,name:String,age:int){
this.id = id;
this.name = name;
this.age = age;
}
}
我希望字典使用id来比较两个键是否相等,而不是使用严格相等(===)来比较键是否相同。
答案 0 :(得分:4)
Dictionary没有这样的功能。但除非我弄错了,否则你会从字典(或矢量或数组或对象 - 无论哪种集合最适合你的需求)获得大致相同的效果,满是由id编制的学生:
var studentsByID:Array = []; // <-- could be a vector, dict, custom collection class, etc..
// ...
studentsByID[someID] = new Student( someID, someName, someAge );
// ...
trace( "my ID:" + myID );
trace( "my Name:" + (studentsByID[myID] as Student).name );
有没有理由不这样做?
答案 1 :(得分:0)
你可以做下一步:
class Student{
var id:int;
var name:String;
var age:int;
Student(id:int,name:String,age:int){
this.id = id;
this.name = name;
this.age = age;
}
public function equals(s:Student):Boolean{
return ((this.id==s.id)&&(this.name==s.name)&&(this.age==s.age));
}
}
所以稍后使用它:
var d:Dictionary=new Dictionary();
d["key"]=new Student();
//snippet
(d["key"] as Student).equals(new Student());
如果你想重载as3运算符,请阅读下面的内容:
Overload [] operator in AS3 http://livedocs.adobe.com/flex/3/langref/flash/utils/Proxy.html
最诚挚的问候 尤金