Динамически создавать массивы во время выполнения и добавлять в другой массив - PullRequest
0 голосов
/ 08 августа 2011

Я работаю над небольшим изометрическим движком для моей следующей игры для iPhone. Для хранения ячеек или тайлов карты мне нужен двухмерный массив. Прямо сейчас я подделываю это с 1-мерным, и это уже недостаточно хорошо.

Итак, я обнаружил, что, просматривая сеть, я обнаружил, что в target-c мне нужно создать массив массивов. Итак, вот мой вопрос: как динамически создавать массивы во время выполнения в зависимости от того, сколько строк карт мне нужно?

Первый массив достаточно прост:

NSMutableArray *OuterArray = [NSMutableArray arrayWithCapacity:mapSize];

теперь у меня есть первый массив, который должен содержать массив для каждой необходимой строки. Проблема в том, что это может быть 10, но это также может быть 200 или даже больше. Поэтому я не хочу вручную создавать каждый массив, а затем добавлять его. Я думаю, что должен быть способ создать все эти массивы во время выполнения на основе ввода, такого как выбранный размер карты.

Надеюсь, ты сможешь мне помочь заранее спасибо Питер

Ответы [ 4 ]

1 голос
/ 08 августа 2011

Я думаю, этот предыдущий вопрос должен помочь.

2d массивы в цели c

Ничего общего со мной.Я никогда не владел iphone и не пытался написать код для него.

0 голосов
/ 08 августа 2011

От вашего отказа от других ответов я думаю, что вы не знаете, как добавить их в цикле, или я не прав?

Попытка:

for (i = 0; i < mapSize; i++) 
    [outerArray addObject: [[NSMutableArray alloc] init]];

или, если вы знаете или можете оценить размер второго измерения:

for (i = 0; i < mapSize; i++) 
    [outerArray addObject: [[NSMutableArray alloc] 
                            initWithCapacity: your_2nd_d_size]];

Теперь, как вы заполняете массивы, то есть, где вы получаете содержимое, зависит от вас. В одном или нескольких циклах вы делаете:

[(NSMutableArray *)[outerArray objectAtIndex: i] 
    addObject: your_current_object]; 
0 голосов
/ 08 августа 2011

Весь смысл NSMutableArray в том, что вам все равно.Инициализируйте оба измерения приблизительным размером, а затем добавьте к ним.Если ваш массив выходит за рамки вашей первоначальной оценки, резервное хранилище будет увеличено, чтобы вместить его.Это относится как к вашим столбцам (массив первого порядка), так и к строкам (массив второго порядка).


РЕДАКТИРОВАТЬ

Не уверенчто вы имели в виду в своем комментарии.Но это один из способов динамически создания двумерного изменяемого массива в Objective-C.

NSUInteger columns = 25 ; // or some random, runtime number
NSUInteger rows = 50;     // once again, some random, runtime number

NSMutableArray * outer = [NSMutableArray arrayWithCapacity: rows];

for(NSUInteger i; i < rows; i++) {
    NSMutableArray * inner = [NSMutableArray arrayWithCapacity: columns];
    [outer addObject: inner];
}

// Do something with outer array here
0 голосов
/ 08 августа 2011

NSMutableArray может содержать столько элементов, сколько вы хотите добавить к нему. (На основе доступной кучи, хотя).

Все, что вам нужно сделать, это когда вы хотите добавить элемент (Array) в этот изменяемый массив, вы можете добавить его, используя метод addObject.

Итак, вы создаете MutableArray следующим образом:

NSMutabaleArray *outerArray = [NSMutableArray array]; // initially contains 0 elements.

[outerArray addobject:<anotherArray>];
...