Как создать 2D NSArray или NSMutableArray в цели C? - PullRequest
3 голосов
/ 16 июля 2010

Я хочу спросить об объективном вопросе C.Я хочу создать 2D NSArray или NSMutableArray в цели C. Что мне делать?Объект, сохраненный в массиве, - NSString *.Большое спасибо.

Ответы [ 3 ]

5 голосов
/ 16 июля 2010

Это, конечно, возможно, но я думаю, стоит отметить, что NSArrays может содержать только объекты , а не примитивные типы.

Способ обойти это - использовать примитивную оболочкутип NSNumber.

NSMutableArray *outer = [[NSMutableArray alloc] init];

NSMutableArray *inner = [[NSMutableArray alloc] init];
[inner addObject:[NSNumber numberWithInt:someInt]];
[outer addObject:inner];
[inner release];

//do something with outer here...
//clean up
[outer release];
1 голос
/ 03 сентября 2013

Попробуйте NSMutableDictionary с NSNumbers в качестве ключей и массивов в качестве объектов.Одно измерение будет ключом, другое - объектами.

Для создания определенного «2D-массива»

NSMutableDictionary *twoDArray = [NSMutableDictionary dictionary];
for (int i = 0; i < 10; i++){
    [twoDArray setObject:arrayOfStrings forKey:[NSNumber numberWithInt:i]];
}

Для извлечения данных

NSString *string = [[twoDArray objectForKey:[NSNumber numberWithInt:3]] objectAtIndex:5];
//will pull string from row 3 column 5 -> as an example
0 голосов
/ 16 июля 2010

Отредактировано, чтобы сделать мой ответ более применимым к вопросу.Изначально я не заметил, что вы ищете 2D-массив.Если вы знаете, сколько, сколько вам нужно, вы можете чередовать данные и добиваться успеха.Я знаю, что, возможно, существуют другие (более объективные стандартные) способы размещения массивов внутри массива, но для меня это сбивает с толку.Массив внутри массива не является двумерным массивом.Это просто второе измерение в одном из объектов.Вы должны добавить массив к каждому объекту, и это не то, что я считаю двухмерным массивом.Правильно или неправильно, я обычно делаю вещи так, как мне кажется.

Итак, допустим, вам нужен массив 6x6:

int arrayStride=6;
int arrayDepth=6;
NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:arrayStride*arrayDepth];

Я предпочитаю инициализировать массив, заполнив егос объектами;

for(int i=0; i<arrayStride*arrayDepth; i++) [newArray addObject @"whatever"];

Затем после этого вы можете получить доступ к объектам по firstDim + secondDim * 6

int firstDim = 4;
int secondDim = 2;
NSString *nextString = [newArray objectAtIndex:firstDim+secondDim*6];
...