ActionScript: ограничения массива / Как обрабатывать много данных? - PullRequest
0 голосов
/ 20 октября 2010

У меня проблемы с многомерным массивом.

Это хорошо работает примерно с 2000 "сетами"

var datasets:Array = new Array(
    // one "set"
    new Array( 
        new Array( time:int, x:int, y:int, type:int ), // one "point"
                /* ... */
        /* ~70 more points */
    ),

    /* ... */
    /* ~3500 more sets */
)

Есть ли лучший способ справиться с таким количеством предметов?

Может быть, использование XML-файлов данных - более удобный подход?

Ответы [ 4 ]

0 голосов
/ 20 октября 2010

Если вы используете Flash Player 10+, вы можете использовать Vector.<T>, что значительно быстрее, чем Array для чтения.

Кроме того (хотя это не связано с FP10), я бы переместил ваш тип времени / x / y / в класс CustomPoint:

var dataSets : Vector.<Vector.<CustomPoint>> = Vector.<Vector.<CustomPoint>>([
    Vector.<CustomPoint>([
        new CustomPoint(time, x, y, type),
        new CustomPoint(time, x, y, type)
    ]),

    // ...
]);
0 голосов
/ 20 октября 2010

Вы можете использовать объекты вместо.

Многомерные массивы на самом деле не существуют в AS3 (они есть, но у вас нет доступа к большинству методов Array).

Вы не можете реально сравнить наличие данных в массиве и их размещение в файле данных. Это действительно зависит от того, как часто вам нужно получить к нему доступ, как вы обрабатываете его, вычисляете и т.д. ...

В любом случае вы всегда можете сохранить свои данные в виде строки JSON, а не XML.

var datasets:Array = [
    // one "set"
    // i leave the types as in your example but you 
    // would , of course , put your values instead.
    { 
        { time:int, x:int, y:int, type:int }, // one "point"
                /* ... */
        /* ~70 more points */
    },

    /* ... */
    /* ~3500 more sets */
]
0 голосов
/ 20 октября 2010

Создание массивов на удивление сильно повышает производительность в Flex 3. Особенно, если вы собираетесь вложить огромную их кучу, вам будет намного лучше с другим решением. Пара предложений в зависимости от того, что вы делаете с данными:

  1. Если вы можете получить, сохранив некоторые из них в файле или базе данных, сделайте это. В конце концов, для этого нужны файлы и базы данных: хранение большого количества данных.
  2. Если вам действительно нужно сохранить все в памяти, попробуйте более продвинутые коллекции. Посмотрите, сможете ли вы найти более эффективный способ упорядочения данных с помощью ArrayCollection или Dictionary.

В любом случае, вы, вероятно, захотите создать собственный объект collectionish для взаимодействия с вашим решением file-db или более продвинутых коллекций. Я знаю, что делать эту дополнительную работу самому нехорошо, но с таким большим количеством данных вы действительно продвигаетесь дальше, для чего предназначены массивы, и лучшее решение будет вашим лучшим выбором.

0 голосов
/ 20 октября 2010

Прежде всего, стилистическое предложение. Следующее:

new Array(x, y, z)

может быть выражено синтаксисом ярлыка:

[x, y, z]

Этот синтаксис облегчает выражение вложенных массивов, например:

[x, y, [z1, z2, z3]]

Теперь, когда мы получили это с дороги ... действительно есть "правильный" ответ на ваш вопрос, но одна вещь, которая приходит мне в голову, это то, что у вас будет очень много вложенных массивов в игре таким образом. Если каждый «набор» имеет фиксированное количество элементов, как насчет помещения их в один длинный массив, а затем просто выполнения математических операций, чтобы определить, как извлечь значение для данной позиции x, y в массиве. Вот что я имею в виду, возьмем этот пример трех «наборов» из трех значений:

[[a1, a2, a3], [b1, b2, b3], [c1, c2, c3]]

Вместо того, чтобы вкладывать их, вы можете просто хранить их в плоском виде, как это:

[a1, a2, a3, b1, b2, b3, c1, c2, c3]

Тогда, когда вы захотите получить значение для набора 2 (для нуля это будет значение «1») и для значения 3 (для нуля это будет значение «2», вы просто получите доступ к array[setIndex * 3 + valueIndex]

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

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