Flash使用两种方法实现字典(即类似于HashMap的字典)。一种方法是flash.utils.Dictionary
类,另一种是通用的Object
。我想查看字典中有多少个key:value
对。在大多数情况下,我只想知道它有任何key:value
对,即只检查它是否为空。AS3:检查字典是否为空
这方面的文档没有太多的帮助。有没有简单明了的方法来做到这一点?如果没有,那么有没有一种丑陋但不太脆弱的方式来做到这一点?
Flash使用两种方法实现字典(即类似于HashMap的字典)。一种方法是flash.utils.Dictionary
类,另一种是通用的Object
。我想查看字典中有多少个key:value
对。在大多数情况下,我只想知道它有任何key:value
对,即只检查它是否为空。AS3:检查字典是否为空
这方面的文档没有太多的帮助。有没有简单明了的方法来做到这一点?如果没有,那么有没有一种丑陋但不太脆弱的方式来做到这一点?
,想到的唯一办法是通过所有键进行迭代并计数 - 像这样:
var count:int = 0;
for (var key:Object in dict)
{
count++;
}
漂亮跛 - 但我认为那是你还剩下什么。请注意,Dictionary对于vanilla Object来说只是一个真正非常薄的包装。
这将可靠地告诉你,如果一个特定的字典是空的:
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]
,你应该没问题)。
另一种方法是添加一个词典条目dict [“count”],每次将项目添加到字典时迭代,并在每次删除项目时进行迭代。或者更复杂的解决方案将继承Dictionary,并添加push,pop和长度属性,这些属性的功能基本相同。
而且由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;
}
这似乎是一个不良做法的解决方案。从字典中删除条目应删除键和值。如果由于某种原因,我想删除这个值,但是离开这个键,那么这个字典就不是真的空 - 它有一些(显然是有意义的)键。 – 2009-10-14 17:32:39
够公平的。如果你删除(obj!= null)语句,那么这将起作用,但我猜测其他答案也会起作用... – Reuben 2009-10-14 20:27:18
其实,最好不要将上述方法结合使用...与这一个? for ... in方法告诉你是否有任何键,这很重要。如果您的键值为空,则此方法可能会失败。 – scriptocalypse 2011-04-19 19:28:34