flash.utils.Dictionary机制

时间:2010-08-27 03:26:09

标签: flash actionscript-3

字典使用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来比较两个键是否相等,而不是使用严格相等(===)来比较键是否相同。

2 个答案:

答案 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

最诚挚的问候 尤金