2015-12-10 3 views
-1

Предположим, что я хочу написать функцию «распаковать» (хранить или записывать, возможно) многомерный массив с использованием вложенных циклов. Концепция достаточно проста, если я могу определить, в случае 3D-массива, длину, ширину и высоту массива.Получение размера каждого измерения многомерного массива

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

+0

'NSArray' или массив C, или что-то еще? –

+0

@JoshCaswell пойдем с NSArray. Если для выполнения этой функции существует функция C, я могу использовать либо Objc, либо стандартный массив C. Мы можем предположить, что массив неизменен. –

+1

Ну, 'NSArray' скажет вам свой [' count'] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/#//apple_ref/occ/instp/NSArray/count), и внутренний 'NSArray' может сделать то же самое. Я не уверен, что еще вам нужно. Есть ли какая-то более глубокая проблема, с которой вы столкнулись? –

ответ

0

NSArray по своей сути одномерен, вектор, если хотите, и, как отметил Джон, у него есть свойство count. Для имитации многомерного массива вы, конечно, могли бы иметь NSArray *rows, который содержит число NSAarray *columnElement и так далее. Это не очень многомерный массив и больше похож на структуру типа дерева, но вы можете назвать его массивом. Но я не думаю, что это то, о чем вы просите.

Я думаю, вы думаете о буфере памяти стиля C, пересекаемом ссылками указателей. Это также по своей сути одномерная структура, поскольку мембранное письмо одномерное. Во многих случаях такой буфер можно рассматривать как 2 или более размер таким образом, что вы говорите, что каждые 50 байтов являются строкой, поэтому позиция 0 является строкой 1 col 1, позиция 49 - это строка 1 col 50, а позиция 50 - строка 2 col 1 и т. Д.

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

Смежные вопросы