Получить размер словаря ActionScript 3

Из комментариев и ответа sftrabbit вы можете видеть, что реляционные операторы определены только для итераторов произвольного доступа, а std::list имеет только двунаправленные итераторы. Поэтому для вашей проблемы существует несколько решений:

  1. Используйте std::vector или std::array. Они предоставляют итераторы с произвольным доступом, имеют лучшую производительность для меньших размеров и в зависимости от того, как вы их заполняете и используете для больших размеров, а также имеют лучший размер памяти. Это предпочтительное решение, я бы назвал его «стандартным» решением. Используйте другие контейнеры только в том случае, если существует очень хорошая измеримая причина (например, профилировщик говорит вам, что использование этого контейнера является узким местом производительности).
  2. Поскольку вы знаете размер списка, вы можете использовать счетчик для ваших итераций:
    for (size_t i = 0, count = families.size()/2; 
         i < count; 
         ++i, --itSmallFamily, ++itLargeFamily)
    { /* do stuff */ }
    
  3. Поскольку ваш список отсортирован, вы можете сравнить элементы, на которые указывают итераторы, вместо самих итераторов.
30
задан Bart van Heukelom 5 March 2010 в 12:50
поделиться

1 ответ

Нет встроенного метода для получения размера / длины / количества словаря AS3. Есть обходные пути: например, вы можете создать собственный класс словаря, который расширяет или обертывает класс flash.utils.Dictionary , добавляя функции счетчика. Вы можете управлять подсчетом по мере добавления / удаления записей или подсчитывать по запросу, используя простую итерацию цикла For:

public static function countKeys(myDictionary:flash.utils.Dictionary):int 
{
    var n:int = 0;
    for (var key:* in myDictionary) {
        n++;
    }
    return n;
}
32
ответ дан 28 November 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: