【问题标题】:Calculating Dictionary length in Flex在 Flex 中计算字典长度
【发布时间】:2009-04-01 21:14:05
【问题描述】:

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

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

我想检查这个字典的长度应该是 2。除了遍历对象还有什么办法吗?

【问题讨论】:

    标签: actionscript-3 apache-flex flex3


    【解决方案1】:

    不,除了遍历元素之外,没有办法检查对象的长度(字典几乎是一个支持非字符串键的对象)。

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

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

    【讨论】:

    • 这里是循环的代码,因为没有其他人提供它:'[ public static function getLen(d:Dictionary):int { var i:int = 0; for (var key:Object in d) { i++; } 返回我; } ]
    【解决方案2】:

    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(dictionary).length

    【讨论】:

    • 这实际上创建了一个数组并将每个元素添加到其中,因此这样做非常昂贵(在内存和时间上)
    【解决方案3】:

    您可以改用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”的信息,但我相信这对对象比对字典更有用。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        对于任何偶然发现此问题的人,现在 DictionaryUtil 有一个更新。 你现在可以打电话了..

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

        【讨论】:

        • 您是否有关于何时可用的信息或文档链接?没有太多关于这方面的信息。
        • 不,我没有。我知道它在 Flex 3.5 和 4 中可用,甚至可能早在 3 中。我只是在寻找这个答案,这里有人提到 DictionaryUtil,所以我对其中可用的功能进行了自动完成并偶然发现了这一点。
        • 我正在使用 Flex 4,但无法获取此 API。但是 Flit 库中有 DictionaryUtil.getItemCount 。 code.google.com/p/flit/source/browse/trunk/flit/src/obecto/…
        【解决方案6】:

        您可以获取Dictionary 中的keys 并查看keys 中的length array 如下:

        var d:Dictionary = new Dictionary();
        d["a"] = "alpha";
        d["b"] = "beta";
        var count:int = DictionaryUtil.getKeys(d).length;
        

        【讨论】:

          猜你喜欢
          • 2021-11-03
          • 1970-01-01
          • 2022-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-17
          • 2011-02-24
          • 1970-01-01
          • 2012-11-02
          相关资源
          最近更新 更多