flash.utils.Dictionary механизм - PullRequest
       2

flash.utils.Dictionary механизм

2 голосов
/ 27 августа 2010

Словарь использует строгие равенства (===) для сравнения ключей, как изменить сравнение, чтобы я мог использовать мой стандарт для сравнения, например, у меня есть класс с именем 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 ]

4 голосов
/ 27 августа 2010

Словарь не имеет подобной функциональности. Но если я не ошибаюсь, вы получите в значительной степени тот же эффект от словаря (или вектора, или массива, или объекта - любой коллекции, которая лучше всего соответствует вашим потребностям), полной студентов, проиндексированных по 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 );

Есть ли причина этого не делать?

0 голосов
/ 27 августа 2010

Вы можете сделать следующее:

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, прочитайте следующее:

Оператор перегрузки [] в AS3 http://livedocs.adobe.com/flex/3/langref/flash/utils/Proxy.html

С наилучшими пожеланиями Евгений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...