【发布时间】:2009-04-01 21:14:05
【问题描述】:
在 Flex 中计算 Dictionary 对象长度的最佳方法是什么?
var d:Dictionary = new Dictionary();
d["a"] = "alpha";
d["b"] = "beta";
我想检查这个字典的长度应该是 2。除了遍历对象还有什么办法吗?
【问题讨论】:
标签: actionscript-3 apache-flex flex3
在 Flex 中计算 Dictionary 对象长度的最佳方法是什么?
var d:Dictionary = new Dictionary();
d["a"] = "alpha";
d["b"] = "beta";
我想检查这个字典的长度应该是 2。除了遍历对象还有什么办法吗?
【问题讨论】:
标签: actionscript-3 apache-flex flex3
不,除了遍历元素之外,没有办法检查对象的长度(字典几乎是一个支持非字符串键的对象)。
http://www.flexer.info/2008/07/31/how-to-find-an-objects-length/
您可能不必担心检查该属性是否为内部属性。
【讨论】:
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(dictionary).length
【讨论】:
您可以改用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”的信息,但我相信这对对象比对字典更有用。
【讨论】:
您可以围绕控制插入/删除的字典编写一个类,以便跟踪键数。
尝试扩展代理或只是做一个包装器。
【讨论】:
对于任何偶然发现此问题的人,现在 DictionaryUtil 有一个更新。 你现在可以打电话了..
var count:int = DictionaryUtil.getKeyCount(myDictionary);
【讨论】:
您可以获取Dictionary 中的keys 并查看keys 中的length array 如下:
var d:Dictionary = new Dictionary();
d["a"] = "alpha";
d["b"] = "beta";
var count:int = DictionaryUtil.getKeys(d).length;
【讨论】: