Очистить словарь Flex ActionScript

Можно ли очистить Flex flash.utils.Dictionary? У меня есть Dictionary, который я хочу очистить (удалить все элементы).

Ответы

Ответ 1

Я не верю, что есть явная ясная команда.

Однако вы можете написать свой собственный, который будет циклически перемещаться по всем клавишам и запускать этот

delete dict[key]; 

Или вы можете просто переназначить

dict = new  Dictionary()

Ответ 2

Я думаю, что это сработает, но я не уверен на 100%, так как вы изменяете словарь во время его итерации:

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

Однако, как правило, я просто создаю новый словарь, когда мне нужно его очистить (хотя, если он упоминается в нескольких местах, это может не сработать для вас).

Ответ 3

Чтобы удалить все элементы в словаре, прокрутите каждую клавишу и используйте ключевое слово delete

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

Если вы хотите быть на 100% уверенным, что ваши удаленные ключи собираются с мусором, вы должны заменить экземпляр словаря на новый словарь.

dict = new Dictionary();

У меня когда-то был объект Dictionary с 3 миллионами строк в качестве ключей. Эти строки будут собирать только мусор, если сам экземпляр словаря.

Ответ 4

Вам нужно не только убедиться, что ключ имеет тип, либо * вам нужно сначала получить ключи, а затем удалить их из словаря. В противном случае вы оставите один ключ в словаре (последний).

Я помню вышеприведенный код, работающий до этого, но недавно, который изменился с последней итерацией флеш-плеера.

Этот код гарантирует, что все они удалены, включая последний.

//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 ];

Ответ 5

Просто:

dictionary = new Dictionary()

Ответ 6

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

Используйте вышеуказанную функцию как функцию утилиты, и вы можете использовать ее на всей базе кода.