字典
中工作,以清除所有键引用吗?public static function cleanDic(_dic:Dictionary):void
{
for (var eachKey:String in _dic)
{
delete _dic[eachKey];
}
}
我担心在for
循环中删除某些关键字会导致未清除所有元素。
这种情况是否会发生?
谢谢
字典
中工作,以清除所有键引用吗?public static function cleanDic(_dic:Dictionary):void
{
for (var eachKey:String in _dic)
{
delete _dic[eachKey];
}
}
我担心在for
循环中删除某些关键字会导致未清除所有元素。
这种情况是否会发生?
谢谢
首先,我不喜欢这里给出的任何答案。现在解释一下:
你的代码将无法删除字典中的所有键,因为字典键可以是任何对象,而不一定是字符串。所以,你需要遍历:
for (key:Object in dictionary) delete dictionary[key];
有很多合理的情况,当你不想创建一个新的字典时——创建一个新的字典有时是一个非常差的替代品。例如,在代码中的两个地方共享值(等等,你为什么要创建一个字典?)。一旦你创建了一个新的字典,代码中的这些位置就应该被通知并重新获取对新对象的引用。因此,有时删除字典中的所有键,虽然不像创建一个新的字典那样计算有效,但比起创建一个新的字典,它会使事情更简单。
字典有一个有趣的方面。它实际上是由两个哈希表实现的,一个包含字符串键,另一个包含指针键(对象键)。不幸的是,这更多是由于糟糕/没有思考的设计,而不是故意的。它继承了来自Object
的字符串哈希表和自己的指针键哈希表。通常你不想把字符串放进字典(或任何其他会隐式强制转换为字符串的东西,比如数字或逻辑值),所以当你发现自己在使用字典时使用字符串键,请再考虑一下,你可能应该使用Object
。
在循环字典期间会发生什么:在幕后创建一个键集合,实际上你是在遍历该集合。然而,由于字典的双重性质,两个键可能被视为相同的键(例如,如果你添加了一个字符串"1"
和一个整数1
键-你将得到其中的一个)。在删除这些键时,在不同版本的播放器中有不同的结果。在一些旧版本中存在一个 bug,即在删除这些键之后序列化字典之后,其中仍然存在一个这些键。但是,你应该避免使用字符串或数字作为键。
不需要编写清理 Dictionary
的方法。只需使用以下代码:
yourdictionary = new Dictionary();
yourdictionary = null
?如果你想销毁Dictionary对象,这种方式似乎更加直接。 - Tom Auger我不太确定你的意思是什么
我担心在for循环期间删除某些键会导致未清理所有元素。
但是你的代码示例是正确的,这就是如何清除Dictionary
。 (假设您只使用具有string
键的Dictionary
对象,因为您的for
循环使用string
。请参见下面工程师的评论。)
或者,您可以将字典设置为新实例-这样可以稍微更快地实现相同的效果:
var dict:Dictionary = new Dictionary ();
... // use dict here
dict = new Dictionary (); // effectively cleans the dictionary
Dictionary
可以被清除的方法”完全不正确。Dictionary
的键不只是String
,还可以是其他对象。因此,代码中的var eachKey:String
是不正确的。 - Engineeri
),你必须从vector
的末尾开始删除(使用i--
)。如果你向前删除(也就是说,你使用i++
),你的循环计数器将增加,但你的元素计数将减少,当你尝试索引一个现在不存在的元素时,你会遇到错误。 - xxbbcc
for(var k:* in yourDictionary) keys[keys.length] = k;
的东西),然后迭代keys
数组调用delete yourDictionary[keys[i]];
来删除字典元素。 - chamberlainpidic[Number(1)] = "string 1";
的结果是一个 'int' 类型的键(通过 getQualifiedClassName(key) 获得)。另一方面,dic[Number(-1)] = "string 1";
的结果是一个 'String' 类型的键。同时,dic["1"] 的结果是一个 'int' 类型的键,但 dic["1."] 的结果是一个 String 键。这意味着 1 和 "1" 将不会产生不同的键(它们都将是值为 1 的 'int'),-1 和 "-1" 也是如此(它们都将是值为 "-1" 的 'String')。 - Triynkoint
类型键,其他数字(负数、小数等)和字符串视为字符串,所有其他对象都视为对象。它似乎尝试先将数字和字符串键转换为int
,如果失败了,就将其存储为字符串,对于所有其他类型,它使用自己的对象哈希。因此,它必须有三个内部哈希,一个用于 int 键,一个用于字符串键,另一个用于对象键。可能针对这三种类型的键进行了某种优化,并且实际上是有道理的,但强制将字符串键 "1" 转换为 1 是不合理的。 - Triynko