многомерный массив - PullRequest
       3

многомерный массив

0 голосов
/ 06 апреля 2011

Я ищу пример многомерных массивов. У меня есть массив миниатюр (например, 9) и предварительный ряд из 4 ячеек таблицы, что дает мне 3 строки. Я хочу создать новый многомерный массив, который будет содержать по 3 строки в каждой строке, содержащей 4 массива.

Я рассмотрел множество примеров за последние 3 часа, но все они, похоже, предлагают использовать кодирование в стиле C, и я не уверен, как их инициализировать или нужно ли мне выпускать. Плюс я использую это в табличном представлении, так что я не уверен, если мне нужно использовать NSarray или у меня не получится сойти с массивом в стиле C. Любые предложения с благодарностью приветствуются.

thumbnailarr[0][0] = 'img1.png';
thumbnailarr[0][1] = 'img2.png';
thumbnailarr[0][2] = 'img3.png';
thumbnailarr[0][3] = 'img4.png';

thumbnailarr[1][0] = 'img5.png';
thumbnailarr[1][1] = 'img6.png';
thumbnailarr[1][2] = 'img7.png';
thumbnailarr[1][3] = 'img8.png';

thumbnailarr[2][0] = 'img9.png';

Ответы [ 3 ]

4 голосов
/ 06 апреля 2011

Специального многомерного массива в target-C не существует, но вы также можете работать с одномерным массивом.

Затем вы будете использовать вычисления по модулю для преобразования нужного индекса строки и столбца в индекс массива: вы будете использовать NSIndexPath для описания "координат" в вашем многомерном массиве.

NSUInteger nRows = 4;
NSUInteger nCols = 3;

-(NSInteger)indexForIndexPath:(NSIndexPath *)indexPath
{
    // check if the indexpath is correct with two elements (row and col)
    if ([indexPath length]!= 2) return -1;
    NSUIntegers indexes[2];
    [indexPath getIndexes:indexes];
    return indexes[0]*nCols+indexes[1];
}

-(NSIndexPath *)indexPathForIndex:(NSInteger)index
{
    NSInteger indexes[2];
    NSInteger indexes[0] = index/nCols;
    NSInteger indexes[1] = index%nCols;
    return [NSIndexPath indexPathWithIndexes:indexes length:2]
}
3 голосов
/ 06 апреля 2011

Многомерный массив - это, по сути, массив массивов, NSArray может иметь NSArrays в качестве своего содержимого.Например:

NSArray *thumbs= [NSArray arrayWithObjects:
                          [NSArray arrayWithObjects: @"img1.png",@"img2.png",@"img3.png",@"img4.png",nil],
                          [NSArray arrayWithObjects: @"img5.png",@"img6.png",@"img7.png",@"img8.png",nil],
                          [NSArray arrayWithObject: @"img9.png"],nil];

доступ так:

[[thumbs objectAtIndex:i] objectAtIndex:j]; //same as thumbs[i][j]
1 голос
/ 06 апреля 2011

Objective-C не имеет ничего особенного для многомерного массива. Вам необходимо использовать двумерный массив C, если только вы не хотите использовать NSArray из NSArray.

NSString *thumbnailarr[3][4];

// initialize is easy if you include row-column in image names
// like img10.png instead of img5.png, img01.png instead of img2.png
for (NSInteger i = 0; i < 3; i++) {
    for (NSInteger j = 0; j < 4; j++) {
        thumbnailarr[i][j] = [[NSString alloc] initWithFormat:@"img%d%d.png", i, j];
    }
}

// in dealloc release them
for (NSInteger i = 0; i < 3; i++) {
    for (NSInteger j = 0; j < 4; j++) {
        [thumbnailarr[i][j] release];
    }
}

А для табличного представления число строк - это то, что вы возвращаете из метода tableView:numberOfRowsInSection:. Не имеет значения, возвращаете ли вы счет NSArray или жестко запрограммированное целое число. Это означает, что если вы вернете 3 из этого метода, то будет 3 ячейки. Нет особой зависимости от NSArray.

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