Flex/ActionScript中的字典

jao*_*jao 2 apache-flex dictionary actionscript-3

有没有办法在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')}
]);
Run Code Online (Sandbox Code Playgroud)

所以,而不是

orientation.getItemAt(3).north
Run Code Online (Sandbox Code Playgroud)

我可以去做类似的事情

orientation.getItemAt('d')north
Run Code Online (Sandbox Code Playgroud)

没有得到以下错误

Implicit coercion of a value of type String to an unrelated type int.
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

lau*_*ent 6

这是一个非常奇怪的结构,你正在使用.为什么不直接使用Dictionary

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

然后,您可以通过键直接访问该值 - 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;
}
Run Code Online (Sandbox Code Playgroud)