2011-12-17 5 views
2

Есть ли способ реализовать словарь с ActionScript в приложении Flex. Например, я хочу хранить что-то вроде этого.Словарь в Flex/ActionScript

public var orientation:ArrayCollection = new ArrayCollection([ 
    {a: new Direction('0','0','b','0')}, 
    {b: new Direction('a','c','0','h')}, 
    {c: new Direction('0','b','d','e')}, 
    {d: new Direction('c','0','0','0')}, 
    {e: new Direction('f','g','0','c')}, 
    {f: new Direction('0','0','e','0')}, 
    {g: new Direction('0','0','0','e')}, 
    {h: new Direction('0','b','0','i')}, 
    {i: new Direction('l','h','j','m')}, 
    {j: new Direction('i','k','0','0')}, 
    {k: new Direction('0','0','0','j')}, 
    {l: new Direction('0','0','i','0')}, 
    {m: new Direction('0','i','0','0')} 
]); 

Так что вместо

orientation.getItemAt(3).north 

Я мог бы что-то вроде

orientation.getItemAt('d')north 

без получения следующее сообщение об ошибке

Implicit coercion of a value of type String to an unrelated type int. 

Спасибо Вам за помощь

ответ

6

Это довольно странная структура, которую вы используете. Почему бы не использовать напрямую Dictionary?

var orientation:Dictionary = new Dictionary(); 
orientation["a"] = new Direction('0','0','b','0'); 
orientation["b"] = new Direction('a','c','0','h'); 
// etc. 

Тогда вы можете получить доступ к значению непосредственно с помощью ключа - trace(orientation["a"]).

Если вам действительно нужно использовать текущую структуру, вы можете создать пользовательскую функцию для доступа к элементам так, как вы хотите. Что-то вроде этого должно работать (непроверено):

function getItemByKey(var array:ArrayCollection, var key:String):* { 
    for (var i:int = 0; i < array.length; i++) { 
     var item:* = array[i]; 
     if (item[key]) return item; 
    } 
    return null; 
} 
+1

hmm, не работал с as3 недавно, но вы не получили доступ к словарям, например, ориентации ["a"] вместо ориентации. A? – Aesphere

+0

Да, я думаю, вы правы, я обновил свой пост. –

+1

Вам даже не нужен словарь здесь, простой объект тоже будет работать, если все клавиши являются строками. – Kapep

Смежные вопросы