ГлавнаяActionScript 3 — «100 советов» › Класс Dictionary

Класс Dictionary

June 19th, 2006
Класс 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.

Категория: ActionScript 3 — «100 советов» Ярлыки: ,

Смотрите также

Ключевое слово delete и члены класса Метки
  1. Пока без комментариев.
  1. Пока нету.