在Flex中计算Dictionary对象长度的最佳方法是什么?
var d:Dictionary = new Dictionary();
d["a"] = "alpha";
d["b"] = "beta";
我想检查此词典的长度应为2。除了循环遍历对象之外,还有什么方法可以做到吗?
答案 0 :(得分:12)
不,除了循环遍历元素之外,没有办法检查对象的长度(Dictionary几乎是支持非String键的对象)。
http://www.flexer.info/2008/07/31/how-to-find-an-objects-length/
您可能不必担心检查该属性是否属于内部属性。
答案 1 :(得分:3)
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(字典).length
答案 2 :(得分:1)
您可以使用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”的信息,但我相信这对于对象比对Dictionary更有用。
答案 3 :(得分:0)
您可以围绕控制插入/删除的字典编写一个类,以便跟踪密钥数。
尝试扩展代理或只做一个包装。
答案 4 :(得分:0)
对于任何磕磕绊绊的人,现在有了对DictionaryUtil的更新。 你现在可以打电话..
var count:int = DictionaryUtil.getKeyCount(myDictionary);
答案 5 :(得分:0)
您可以获得keys
的{{1}}并查看Dictionary
length
的{{1}},如下所示:
keys