Flash使用两种方法来实现字典(类似于HashMap)。其中一种方法是使用flash.utils.Dictionary
类,另一种方法是使用通用的Object
。我想要检查字典中有多少个key:value
对。在大多数情况下,我只想知道它是否为空,也就是说,只需检查它是否为空。
文档在这一点上并没有提供太多帮助。有没有一种简单明了的方法来做到这一点?如果没有,有没有一种丑陋但不太脆弱的方法来做到这一点?
Flash使用两种方法来实现字典(类似于HashMap)。其中一种方法是使用flash.utils.Dictionary
类,另一种方法是使用通用的Object
。我想要检查字典中有多少个key:value
对。在大多数情况下,我只想知道它是否为空,也就是说,只需检查它是否为空。
文档在这一点上并没有提供太多帮助。有没有一种简单明了的方法来做到这一点?如果没有,有没有一种丑陋但不太脆弱的方法来做到这一点?
以下代码可可靠地判断一个字典是否为空:
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]
,那么应该没有问题)。
var count:int = 0;
for (var key:Object in dict)
{
count++;
}
还有OP提到的空/非空特殊情况:
var empty:Boolean = true;
for (var key:Object in dict)
{
empty = false;
break;
}
这样的代码应该放在一个实用函数中,而不是到处复制它,这样在使用时就可以清楚地知道正在发生什么。
测试并且工作正常。
通过避免使用负面语言来提高清晰度。
/**
* @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;
}