В Flash Player 10 с векторами, зачем вам больше использовать массивы? - PullRequest
5 голосов
/ 13 ноября 2010

Есть ли причина придерживаться массивов как структуры данных списка по умолчанию в AS3, если вы ориентируетесь на Flash Player 10?Почему бы не использовать векторы (типизированные массивы) по умолчанию во всей программе, поскольку они:

  • быстрее
  • проверен тип

Работает ли он плохо или подвергаетсяболее высокие накладные расходы памяти?Есть ли основания больше использовать массивы?

Ответы [ 5 ]

6 голосов
/ 13 ноября 2010

Множество причин. Например, векторы не заполнены, поэтому, если ваш вектор имеет индекс 999, у вас есть массив из 1000 элементов. В стандартном массиве у вас может быть всего один.

4 голосов
/ 18 ноября 2010

Я отвечаю на свой собственный вопрос, основываясь на том, что я узнал об этой проблеме.

Векторы быстрее только для этих типов данных: - ( proof )

  • int
  • uint
  • Число
  • Boolean

Массивы предпочтительнее длявсе другие типы:

  • Строки
  • классы

Векторы более ограничены для работы с:

  • чтение / записьпроверяются границы
    • несуществующие слоты не могут быть установлены напрямую с помощью [5] = Val
    • несуществующие слоты не могут быть прочитаны (или вы получите исключение)
  • необходимо нажать (), чтобы создать слоты
  • сортировка медленнее

Векторы более проблематичны:

  • многомерные массивыне может быть преобразован в вектор
  • вектор не может быть преобразован в многомерный массив
  • не может работать с String.split ()
  • фиксированный тип для всех элементов - неприменимо дляJSON

VЭкторы легче отлаживать:

  • установка [Вектор целых] в [Вектор вектора целых] вызовет исключение
  • ошибки времени компиляции (в некоторых случаях)
    • при попытке установить [Вектор целых] в [Вектор строк]
    • при попытке установить [Вектор целых] в [Вектор вектора целых]
3 голосов
/ 13 ноября 2010

Может быть, особенно, когда вы не знаете тип - это в некотором смысле свободный список. Как, скажем, с данными JSON.

Редактировать : о, вот еще одна полу-причина - String.split(). Это вернет вам массив строк. Не знаю, почему вы не можете получить Vector.<String> из этого, гр.

С учетом вышесказанного, во Flash 10+ 99% времени вы будете использовать вместо них Векторы. Все «недостатки» Векторов относятся только к очень конкретным (часто редким) вариантам использования.

2 голосов
/ 14 ноября 2010

Это зависит только от того, что вы пытаетесь сделать.Попробуйте отсортировать вектор?Это займет гораздо больше времени.Вы собираетесь соединить массив или вектор?В этом случае вы, вероятно, захотите отказаться от них обоих и использовать связанный список.Если вы ищете что-то с именованными ключами, на которое вам нужно сослаться, то вам, вероятно, лучше использовать словарь.Это неопределенный, бесполезный ответ - «это зависит» - но это действительно так.Есть причина, по которой существует так много разных структур списка данных.

2 голосов
/ 13 ноября 2010

Как уже сказал Робусто, векторы не малонаселены. Хотя это может быть плохо для размера, это очень-очень хорошо для скорости. Поэтому, если вам не нужны очень малонаселенные структуры (и для реализации этой редкой вещи также требуется дополнительное пространство), вы можете просто воспользоваться преимуществами скорости.

Это типичный обмен: память в зависимости от скорости: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...