【问题标题】:How can I define a Dictionary with string key in AS3?如何在 AS3 中使用字符串键定义字典?
【发布时间】:2013-01-25 11:14:21
【问题描述】:

如何在 AS3 中使用字符串键定义字典?以及如何进行读取操作? 例如:

var Dic:Dictionary = new Dictionary();
Dic["Exhausted"] = "He who talks more is sooner exhausted, please keep smiling :)";
String str = str.substring(8,str.length-1); // == str = "Exhausted";
trace('Dic[' + str + '] = ' + Dic[str]);

输出是 Dic[Exhausted] = undefined???!!

为什么?

【问题讨论】:

    标签: string actionscript-3 dictionary key


    【解决方案1】:

    我认为你在这一行有语法错误:

    String str = str.substring(8,str.length-1);
    

    如果你只是使用这个:

    var d:Dictionary = new Dictionary();
    d["Exhausted"] = "He who talks more is sooner exhausted, please keep smiling :)";
    
    trace(d["Exhausted"]);
    

    你可以看到一切都很好。

    var str:String = str.substring(8,str.length-1); 的问题在于您定义了一个名为“str”的字符串:var str:String,但您分配了一个值,该值是在 str 上调用的 substring() 方法的结果,当然 str 还不存在当您在其上调用子字符串时。 不确定这是否有意义:您将 str 定义为在 str 上应用子字符串的结果。

    actionscript 编译器应该抱怨一下:

    在属性字符串之后需要一个定义关键字(例如函数),而不是 str。

    只是一个疯狂的猜测,但是您是否会碰巧在代码中的其他地方定义了 str 并且您只是在使用 str 之前再次使用 str 更新它?在这种情况下,您不应该重新定义 str,您应该简单地分配一个新值。 例如

    //somewhere else
    var str:String = "12345678Exhausted";
    //further down
    var Dic:Dictionary = new Dictionary();
    Dic["Exhausted"] = "He who talks more is sooner exhausted, please keep smiling :)";
    str = str.substring(8,str.length); // == str = "Exhausted";
    trace('Dic[' + str + '] = ' + Dic[str]);
    

    另外,另一个语法错误是您如何定义str: 应该是var str:String(as2/as3 语法),而不是String str(java/c++/etc.style)

    【讨论】:

    • 首先,我是Java人,请原谅String语法的错字,,,,是的,我在上面的行中得到了“str”形式(对不起,没有包含这些信息) 详细:{var str:String = 情绪[i].toString(); str = str.substring(8,str.length-1); // 我使用这一行来获取对象的名称,我使用它的名称作为 Dic 的键。 trace('Dic[' + str + '] = ' + Dic[str]);}
    • 是的,简而言之,我需要从字典中弹出一个值,而键是一个变量!例如:Dic[x] while x is a variable,假设我从另一个代码中获得了 x 值。怎么来的?
    • “弹出一个值”是指从字典中删除它,访问/使用该值吗?如果要从Dictionary 对象中删除键/值对,请使用delete 关键字:delete Dic[x];。如果要检查密钥是否存在并使用它,请检查undefined,如下所示:if(Dic[x] != undefined) trace("found x:",Dic[x]);。 HTH
    • 当然,了解字典在 AS3 中的工作方式尤其有帮助。我的意思是通过它的键搜索或获取值...但是,我尝试了您的代码并且它有效! !直到现在我不知道为什么当我从子字符串函数返回字符串键并使用它来检索它的值时,它返回“未定义”!我再看一下,非常感谢亲爱的乔治您的有用回复...(Y)
    • @ مريم قد الحياة 请注意,在我的代码中,我执行了类似于var str:String = "12345678Exhausted"; str = str.substring(8,str.length); 而不是str.substring(8,str.length-1); 的操作,这将返回“Exhauste”,这当然是无效/未定义的键。这会是你的问题吗?此外,您可以使用str.substring(8);,因为如果您不传递第二个参数,则将字符串的结尾假定为第二个索引。 HTH
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    相关资源
    最近更新 更多