Показать сообщение отдельно
Старый 02.11.2006, 20:20
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 89  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
По умолчанию 11. Класс Dictionary

Класс Dictionary (flash.utils.Dictionary) - новое дополнение в ActionScript. Он представляет собой то же самое, что и базовые объекты Object, за исключением одной особенности: в объектах Dictionary в качестве ключей могут быть использованы не только строки, но и любые другие значения.

Object использует только строковые ключи. Если в качестве для ключа используется не строковое значение, оно интерпретируется в строку.
Пример:
Код:
var obj:Object = new Object();
obj["name"] = 1; // string key "name"
obj[1] = 2; // key 1 (converted to "1")
obj[new Object()] = 3; // key new Object() converted to "[object Object]"

for (var prop:String in obj) {
     trace(prop); // traces: [object Object], 1, name
     trace(obj[prop]); // traces: 3, 2, 1
}
Если вы попытаетесь использовать разные объекты в качестве ключей для Object, которые одинаково преобразуются в строку, в контейнере это будет один и тот же ключ, ссылающийся на единственное значение.
Код:
var a:Object = new Object();
var b:Object = new Object();

var obj:Object = new Object();
obj[a] = 1; // obj["[object Object]"] = 1;
obj[b] = 2; // obj["[object Object]"] = 2;

for (var prop:String in obj) {
     trace(prop); // traces: [object Object]
     trace(obj[prop]); // traces: 2
}
Класс Dictionary подобного ограничения не имеет. В качестве ключа вы можете использовать любой тип. Таким образом, если в примере выше использовать Dictionary, вы получите два различных ключа, по одному для каждого объекта.
Код:
import flash.utils.Dictionary;

var a:Object = new Object();
var b:Object = new Object();

var dict:Dictionary = new Dictionary();
dict[a] = 1; // dict[a] = 1;
dict[b] = 2; // dict[b] = 2;

for (var prop:* in dict) {
     trace(prop); // traces: [object Object], [object Object]
     trace(dict[prop]); // traces: 1, 2
}
И несмотря на то, что вы все же получили [object Object] при трассировке, это просто результат строкового преобразования в команде trace; это уникальный объектный ключ в экземляре Dictionary.

Обратите внимание, что prop здесь определена как *. Это важно, т.к. ключи в объекте dict могут быть любого типа. Если вы используете String как тип prop, объекты a и b при их выборке в цикле будут приводиться к строкам, помещая в prop "[object Object]" вместо действительных ссылок на a и b, которыми они должны быть для корректного доступа к значениям 1 и 2 из dict.
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.