2010-12-12 8 views
0

Я пытаюсь реализовать что-то похожее на игру управления полетом. Будет набор объектов, представляющих плоскости, которые будут порождены и удалены «случайно». Отдельные самолеты могут быть затронуты и будут реагировать. Модель должна воспринимать индекс плоскости как параметр, когда что-то коснется.Какую структуру я должен использовать для хранения этих объектов?

Мои требования хранения являются:

  1. нужно быстро итерации по всем элементам
  2. Необходимость быстрой вставки/удаления
  3. нужно посмотреть вверх и деталь быстро по индексу

    • Что должен Я использую? NSMutableArray, NSMutableSet?
    • Должен ли я хранить каждый объект в двух местах? (например, для быстрой итерации, массив для быстрого поиска)?

ответ

1

NSMutableArray достаточно хорошо, если вы хотите посмотреть только по индексу. Проблемой может быть удаление, которое принимает O (n). Если вам не нужно постоянство индекса, вы можете удалить его в O (1), поместив последний элемент в элемент и удалите массив на 1.

Сохранение в двух местах будет медленным в этом случае, поскольку оно будет не принести никакого преимущества в скорости поиска, но потребует сохранения двух контейнеров.

+0

Завершите свое мнение. 'NSMutableArray' должно быть прекрасным на данный момент. Также обратите внимание, что 'NSMutableArray' не является стандартным массивом, поэтому вы не должны слепо применять свои стандартные знания в области компьютерных наук. См. Http://ridiculousfish.com/blog/archives/2005/12/23/array/. – Yuji

+1

Если 'NSMutableArray' окажется недостаточно быстрым, контейнер может быть заменен позже. Затем будет важно сохранить использование детали контейнера в очень маленьком подмножестве вашей программы, чтобы вы могли впоследствии легко выполнить замену реализации. – Yuji

+0

@Yuji Это хороший совет, спасибо. – Robert

0

Хранение в 2-х местах кажется глупым. Массив должен быть точным, с o (n) итерацией, o (1) искать по индексу. Я не знаком с объективом-c, чтобы знать скорость удаления или вставки, но оба они должны быть очень быстрыми, если используются некоторые средства копирования массива на уровне системы.