在Flex中计算字典长度

时间:2009-04-01 21:14:06

标签: actionscript-3 flex flex3

在Flex中计算Dictionary对象长度的最佳方法是什么?

var d:Dictionary = new Dictionary();
d["a"] = "alpha";
d["b"] = "beta";

我想检查此词典的长度应为2。除了循环遍历对象之外,还有什么方法可以做到吗?

6 个答案:

答案 0 :(得分:12)

不,除了循环遍历元素之外,没有办法检查对象的长度(Dictionary几乎是支持非String键的对象)。

http://www.flexer.info/2008/07/31/how-to-find-an-objects-length/

您可能不必担心检查该属性是否属于内部属性。

答案 1 :(得分:3)

as3corelib中有一个util函数可以获取字典中的键。您可以查看DicitonaryUtil

方法是:

    public static function getKeys(d:Dictionary):Array
    {
        var a:Array = new Array();

        for (var key:Object in d)
        {
            a.push(key);
        }

        return a;
    }

所以你会做getKeys(字典).length

答案 2 :(得分:1)

您可以使用associative arrays代替,因为我认为无法检查Dictionary对象的长度。但是,您可以扩展Dictionary类并添加该功能并覆盖相应的方法。

或者,您可以每次循环访问它以获得长度,这不是一个好主意但可用。

var d:Dictionary = new Dictionary();
d["hi"] = "you"
d["a"] = "b"
for (var obj:Object in d) {
  trace(obj);
}
// Prints "hi" and "a"

您还可以查看here有关使用“setPropertyIsEnumerable”的信息,但我相信这对于对象比对Dictionary更有用。

答案 3 :(得分:0)

您可以围绕控制插入/删除的字典编写一个类,以便跟踪密钥数。

尝试扩展代理或只做一个包装。

答案 4 :(得分:0)

对于任何磕磕绊绊的人,现在有了对DictionaryUtil的更新。 你现在可以打电话..

var count:int = DictionaryUtil.getKeyCount(myDictionary);

答案 5 :(得分:0)

您可以获得keys的{​​{1}}并查看Dictionary length的{​​{1}},如下所示:

keys