2010-03-10 57 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]; 
     } 
    } 

使用上述功能的效用函數,你可以用它在你的代碼庫。