Tun*_*ied 3 flash actionscript-3
这是否正在Dictionary清理所有关键参考?
public static function cleanDic(_dic:Dictionary):void
{
for (var eachKey:String in _dic)
{
delete _dic[eachKey];
}
}
Run Code Online (Sandbox Code Playgroud)
我很担心,如果我在for循环中删除一些键会导致所有元素都不干净.
这会发生吗?
谢谢
小智 9
首先,我不喜欢这里给出的任何答案.现在,解释一下:
您的代码不会删除所有字典键,因为字典键可能是任何对象,而不是必需的字符串.所以,你需要迭代:
for (key:Object in dictionary) delete dictionary[key];
当您不想创建新词典时,有许多合理的场景 - 创建新词典有时候是一个非常糟糕的替代品.例如,您在代码中的两个位置共享值(等等,为什么还要创建一个?).创建新的代码后,应通知代码中的位置,并以某种方式重新获得对新对象的新引用.因此,有些时候从字典中删除所有键,虽然计算效率不是很高,但与创建新键相比,可以更好地解决,因为它会使事情变得简单.
有一个有趣的方面Dictionary.它实际上实现为两个哈希表,一个包含字符串键,另一个包含指针键(对象键).不幸的是,这主要是由于糟糕/不合理的设计,而不是意图.它具有从其继承的字符串哈希表,Object以及它自己的指针键之一.平时不希望把字符串转换为词典(或其他任何这是隐含强制转换为字符串,如数字或逻辑值),所以,当你发现自己使用字符串键与词典-再想一想,你可能想使用Object替代.
在字典循环期间会发生什么:在幕后创建一组键,实际上,您迭代该集合.但是,由于字典的双重性质,两个键可能被认为是相同的一个(例如,如果你添加了一个字符串"1"和int 1键 - 你将只获得其中一个.当删除键时,在不同的播放器中那些版本有不同的结果.在一些旧版本中有一个错误,删除这些键后,然后序列化字典中的其中一个键保留在其中.但是,再次,你应该避免使用字符串或数字作为键.