Obj-C и многомерные массивы - PullRequest
0 голосов
/ 31 января 2011

Как лучше всего работать с многомерными массивами в Obj-C?Я прочитал все формы, создающие NSArray's NSArrays, использую массивы стиля C и некоторые даже предлагали бросать в STL и использовать массивы стиля c ++ ....

Мне нужен 3-мерный массивобъекты.Является ли лучшая вещь NSArray NSArrays NSArrays?Это кажется запутанным.Есть ли какой-нибудь объект, который может иметь дело с n-мерными массивами в хорошем чистом ясном API?конечная цель - картографические данные для игры.Я привык к стилю вещей в C, но я стараюсь использовать obj-c (учусь по ходу дела).

Ответы [ 3 ]

3 голосов
/ 31 января 2011

Естественно предлагать вложение, но трата времени, если вам не нужно что-то, что может делать разреженные массивы.

Лучшим решением является создание NSMutableArray и заполнение его NSNulls или NSPointerArray, который допускает нулевые значения с помощью метода setCount:.

Тогда, если вам нужно, скажем, иметь возможность обрабатывать объекты в координатах (0..3,0..3,0..3), то есть 4 * 4 * 4 (или 64) слота.

Оттуда превращение координаты (x, y, z) в слот в массиве - это просто вопрос умножения; (1,2,3) - объект с индексом (1 + (2 * ширина) + (3 * ширина * высота)).

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

1 голос
/ 31 января 2011

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

Это было бы относительно просто - оболочка будет владеть массивом массивов массивов, но предоставит методы, подобные вамопишите, что скрывает относительно некрасивый код обхода массивов.

0 голосов
/ 31 января 2011

В стандартной библиотеке нет многомерного массива. Я бы обернул вещь в своем собственном классе, это довольно просто сделать. Реализация будет вложенной NSArray s или обычными C-массивами, если первое решение окажется медленным .

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