2010-03-10 50 views

回答

6

我不相信有明确的明确命令。

然而,你可以写你自己会遍历所有的按键和运行这个

delete dict[key]; 

或者你也可以重新分配

dict = new Dictionary() 
+0

我的目标是重复使用'Dictionary'而不是创建一个新的。 – 2013-03-07 20:40:16

6

认为这会工作,但我我不是100%肯定的,因为你在修改词典的同时迭代它:

function clear(d:Dictionary):void { 
    for(var id:* in d) { 
    delete d[id]; 
    } 
} 

但是,我通常只是在需要清除一个字典时创建一个新的字典(尽管如果它在多个地方被引用,那么这可能对您不适用)。

+2

+1作品。通过两次运行测试它,第一次运行后它是空的。 – 2011-04-03 01:05:33

+2

上面的代码有一个缺陷:'id'必须是NO类型,因为Dictionary可以保存任何类型的对象作为键引用,而不仅仅是像动态对象那样的字符串。上面的代码只会删除字符串引用! – 2012-03-09 17:58:16

+0

我编辑了解决问题的答案。 id现在是无类型的(*),所以它可以采用任何类型并清除所有可能的密钥。当它被键入为一个字符串时,id只会清除字符串键;此外,不会抛出任何错误,并且对于非字符串键,id不为空,它们在迭代期间被简单地跳过。所以id必须是无类型的,以遍历所有可能的键。 – Triynko 2014-01-15 19:23:42

1

您不仅需要确保密钥是对象类型,还是需要先获取密钥然后从字典中删除它们。否则,你会在字典中留下一个关键字(最后一个)。

我记得上面的代码在工作之前,但最近已经改变了最后一次flash player的迭代。

此代码将确保它们全部被删除,包括最后一个。

//Clean up the dictionary 
var keys:Array = []; 
var key:*; 
for (var key:* in dictionary) 
    keys.push(key); 
for each (var key:* in keys) 
    delete dictionary[ key ]; 
2

要删除所有元素的词典,循环遍历每个键,使用delete关键字

function clear(dict:Dictionary):void 
{  
    for(var key:Object in dict) 
    { 
     delete dict[key]; 
    } 
} 

如果你想成为100%确保您的删除键被垃圾回收,您必须将您的Dictionary实例替换为新的Dictionary。

dict = new Dictionary(); 

我曾经有一个Dictionary对象,有300万字符串作为键。这些字符串只会在Dictionary实例本身时被垃圾回收。

0

刚:

dictionary = new Dictionary() 
0
public static function clear(dict:Dictionary):void { 
     var key:* 
     for(key in dict) { 
      delete dict[key]; 
     } 
    } 

使用上述功能的效用函数,你可以用它在你的代码库。