Просмотр полной версии : Один массив для множества или для каждего отдельный массив?
OlmerDale
26.03.2015, 23:07
Помогите решить спор с коллегой, который самостоятельно я разрешить не могу.
Существует объект, который содержит однотипные объекты с массиве
private var _objects:Vector.<CustomClass>
Эти объекты бывают в разных состояниях - используется, не используется и ожидает использования.
Так вот спор в том, стоит ли создать три массива, если я могу и все в одном устроить..
Нужно или нет?
Зависит от конечной задачи.
А при смене состояния элемент перекидывается в соседний массив?
Вряд ли здесь есть правильное решение. Ведь можно хранить и три массива, и общий одновременно. Может и ошибаюсь, но всё зависит от ситуации.
OlmerDale
26.03.2015, 23:39
А при смене состояния элемент перекидывается в соседний массив?
Да..
Zebestov
27.03.2015, 00:43
Использование одного массива может быть более эффективно только если за один проход логически обрабатывать все три типа объектов. Если же в разных местах кода необходимо обработать первый, второй и третий типы объектов, то в случае с одним массивом это приведет к трем проходам (вместо одного) с логическими операциями в каждом.
Разделение на три массива неудобно лишь миграцией при смене состояния. Подобное усложнение кода будет совершенно не оправданным, если объектов меньше нескольких сотен тысяч (или миллионов) :) ну чтобы почувствовать выигрыш.
caseyryan
27.03.2015, 07:52
ну чтобы почувствовать выигрыш.
Который тут тоже вряд ли удастся почувствовать, потому что для определения в каком состоянии объект находится, тоже надо будет пробежаться по массивам, чтобы его найти)
В ас3 все просто устроено гораздо примитивнее некоторых других языков, в которых есть разные HashMap, LinkedMap и т.п. Которые как раз и затачивались для решения подобных задач
Zebestov
27.03.2015, 12:17
Который тут тоже вряд ли удастся почувствовать, потому что для определения в каком состоянии объект находится, тоже надо будет пробежаться по массивам, чтобы его найти.
Почему-то изначально думал, что каждый объект имеет, например, геттер state :)
caseyryan
27.03.2015, 18:23
Почему-то изначально думал, что каждый объект имеет, например, геттер state
Не, ну это понятно, но чтобы к этому геттеру обратиться, надо ведь сначала сам объект как-то найти
Zebestov
27.03.2015, 20:11
Мы рискуем увлечься обсуждением логики, которая может быть самой разной.
Если нужно взять состояние объекта — мы всегда знаем, о каком объекте идет речь, имеем ссылку на него (а следовательно и состояние).
Если нужно обработать все объекты с одинаковым состоянием — мы пройдемся по одному из трех массивов, без нужды производить сравнение (тут будет определенный выигрыш).
OlmerDale
27.03.2015, 20:48
Логика такая, как говорит caseyryan :)
Zebestov
27.03.2015, 21:01
Ну т.е. в нужный момент времени мы не имеем ссылки на тот самый объект, который нас заинтересовал, и всякий раз лезем лопатить массив (массивы) в его поисках по каким-то косвенным признакам?
OlmerDale
27.03.2015, 21:54
Такое очень часто бывает. Как например, когда мы создаем фейерверк то ссылки на искры мы не храним.
Вот и тут примерно тоже самое, некое количество объектов, которое рекурсивно нужно обходить и в зависимости от состояния, что-то с ними делать. Но я отказался от идеи нескольких массивов.
Zebestov
27.03.2015, 22:22
Каждая искра может знать свой номер в массиве — запросто :) или по окончании работы послать событие. Как ни крути, всегда (ну наверное почти всегда) можно сделать так, чтобы в одно касание добраться до объекта.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.