AS3:检查词典是否为空

时间:2009-10-13 03:31:49

标签: flash actionscript-3 dictionary

Flash使用两种方法实现字典(即HashMap之类的东西)。一种方法是flash.utils.Dictionary类,另一种方法是通用Object。我想查看字典中有多少key:value对。在大多数情况下,我只想知道它有任何 key:value对,也就是检查它是否为空。

文档在这一点上没有多大帮助。有一个简单明了的方法吗?如果不这样做,是否有一种丑陋而又不太脆弱的方法呢?

5 个答案:

答案 0 :(得分:12)

这将可靠地告诉您特定字典是否为空:

function isEmptyDictionary(dict:Dictionary):Boolean
{
    for each(var obj:Object in dict)
    {
        if(obj != null)
        {
           return false
        }
    }
    return true;
 }

请注意,您需要执行obj != null检查 - 即使您设置了myDictionary[key] = null,它仍将作为空对象进行迭代,因此常规for...in循环将无效那个例子。 (如果你总是使用delete myDictionary[key],你应该没事。)

答案 1 :(得分:6)

想到的唯一方法是迭代所有键并计算它们 - 就像这样:

var count:int = 0;

for (var key:Object in dict)
{
   count++;
}

相当蹩脚 - 但我认为这就是你留下的。请注意,Dictionary对于vanilla对象来说真的非常薄。

答案 2 :(得分:2)

OP提到的空/非空特殊情况:

var empty:Boolean = true;

for (var key:Object in dict)
{
   empty = false;
   break;
}
像这样的代码应该放在一个实用程序函数中,而不是在整个地方复制它,所以在使用点它会很明显发生了什么。

答案 3 :(得分:1)

另一种方法是添加字典条目dict [“count”],每次向字典添加项目时都会迭代,并在每次删除项目时进行迭代。或者更复杂的解决方案是子类Dictionary并添加push,pop和length属性,这基本上是相同的。

答案 4 :(得分:0)

经过测试和工作。
通过避免否定语言来提高清晰度。

/**
 * @return  Whether given Dictionary has content or is empty.
 */
public function hasContent(dictionary:Dictionary):Boolean
{
    for (var anything:Object in dictionary)
        return true;
    return false;
}