Flash使用两种方法实现字典(即HashMap之类的东西)。一种方法是flash.utils.Dictionary
类,另一种方法是通用Object
。我想查看字典中有多少key:value
对。在大多数情况下,我只想知道它有任何 key:value
对,也就是检查它是否为空。
文档在这一点上没有多大帮助。有一个简单明了的方法吗?如果不这样做,是否有一种丑陋而又不太脆弱的方法呢?
答案 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;
}