Словарь позволяет использовать сложные объекты в качестве ключей. Как упоминал Джон, словарь нельзя использовать в качестве хэш-карты, поскольку он использует строгое равенство для проверки ключей словаря.
Напротив, Объект может использоваться как карта, где ключи являются строками. Это означает, что при добавлении сложного объекта в качестве ключа эти объекты toString () будут вызываться и использоваться в качестве ключа на карте. В вашем примере вы можете добавить реализацию toString () к вашему классу Person, в которой перечислены все свойства, которые (вместе) делают человека уникальным.
Рассмотрим метод toString ():
public function toString():String {
return "[Person(name:" + name + ", age=" + age + ")]";
}
Если вы затем запустите следующий тест, он пройдет:
public function testMap():void {
var jonny1:Person = new Person("jonny", 26);
var jonny2:Person = new Person("jonny", 26);
var map:Object = {};
map[jonny1] = "That's me";
assertEquals("That's me", map[jonny2]); // succeeds
}
И если вы посмотрите на экземпляр карты с помощью отладчика, вы увидите:
map:Object
[Person(name:jonny, age:26)] : That's me
Примечание: хотя это работает, я не уверен, рекомендую ли я полагаться на метод toString () для проверки на равенство. Я бы посчитал toString () вспомогательным средством отладки / ведения журнала, которое может измениться (и нарушить ваш код).