Добавить диагональ двумерного массива в Objective C - PullRequest
0 голосов
/ 21 декабря 2018

Дано: 2-мерный массив:

 [[1 2 3]  
  [4 5 6]  
  [9 8 9 ]]  

Необходимо добавить диагональ массива: 1 + 5 + 9 = 15

   NSMutableArray *array = [NSMutableArray arrayWithObjects:[NSMutableArray arrayWithObjects:@1,@2,@3,nil],
                        [NSMutableArray arrayWithObjects:@4,@5,@6,nil],
                        [NSMutableArray arrayWithObjects:@9,@8,@9,nil],nil];

   NSNumber* total = 0;
   for (NSNumber* row in array) {
     total = total + array[row][row];
   }

   NSLog(@"%@",total);

Здесь я не могу получить доступ к элементумассива.Это выдает ошибку "array [row] [row]".Каков наилучший способ инициализации 2D-массива и доступа к элементу массива в Objective-C?

1 Ответ

0 голосов
/ 21 декабря 2018

В вашем коде то, что вы делаете здесь: for (NSNumber* row in array) помещает каждый элемент array в переменную row (это называется перечисление массива btw).

Вам нужно использовать индекс массива, а не значение каждого элемента (это то, что вы делаете выше).

Кроме того, выне нужно использовать объект (NSNumber *) для ваших расчетов.Подойдет простой NSInteger.

Вот код:

NSMutableArray *array = [NSMutableArray arrayWithObjects:[NSMutableArray arrayWithObjects:@1,@2,@3,nil],
                    [NSMutableArray arrayWithObjects:@4,@5,@6,nil],
                    [NSMutableArray arrayWithObjects:@9,@8,@9,nil],nil];

NSInteger total = 0;
for (NSUInteger row = 0; row < array.count; row ++) {
    total = total + [array[row][row] integerValue]; // integerValue converts the NSNumber to an NSInteger
}

NSLog(@"%d",total);
...