Категории
Хирургия
Fieldnames( s ) - возвращает массив строк с именами всех полей просмотров - 380
Структуры MATLABа можно назвать агрегированным типом данных. Другим агрегированным типом данных в системе MATLAB являются так называемые ячейки (cells).
#$+Массивы ячеек.
Массив ячеек может содержать в качестве элементов массивы разных типов! Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, он является универсальным контейнером - его ячейки могут содержать любые типы и структуры данных, с которыми работает MATLAB - массивы чисел любой размерности, строки, массивы структур и другие ( вложенные ) массивы ячеек. Массив ячеек может быть полем структуры.
Методы создания массивов ячеек похожи на методы создания структур. Как и в случае структур, массивы ячеек бывают созданы либо путём последовательного присваивания значений отдельным элементам массива, либо созданы целиком при помощи специальной функции cell(). При этом в любом случае важно различать ячейку ( элемент массива ячеек ) и её содержимое. Ячейка - это содержимое плюс некоторая оболочка (служебная структура данных) вокруг этого содержимого, позволяющая хранить в ячейке произвольные типы данных любого размера.
Выражение любого типа данных системы MATLAB можно превратить в ячейку, заключив его в фигурные скобки. Тогда с помощью следующих присваиваний и обычных операций индексации
MyStruct = struct( 'field1',[ 1 2 3],'field2','Hello');
MyCellArray( 1, 1 ) = { 'Bonjour!' };
MyCellArray( 1, 2 ) = { [ 1 2 3; 4 5 6; 7 8 9 ] };
MyCellArray( 2, 1 ) = { MyStruct };
MyCellArray( 2, 2 ) = { [ 9 7 5 ] };
строится массив ячеек 2x2, элементами которого являются ячейки, содержащие соответственно текстовую строку, числовой массив 3x3, структуру MyStruct и вектор-строку 1x3. Итак, построенный массив ячеек содержит разнородные данные, о чём нам и сообщает система MATLAB при вводе имени такого массива и нажатии клавиши Enter:
При этом показывается содержимое не всех ячеек этого массива. Более подробную информацию можно получить, вызвав функцию celldisp(MyCellArray):
MyCellArray{1,1} =
Bonjour!
MyCellArray{2,1} =
field1 : [ 1 2 3 ]
field2 : 'Hello'
MyCellArray{1,2} =
1 2 3
4 5 6
7 8 9
MyCellArray{2,2} =
9 7 5
Отсюда видно, что для того, чтобы подобраться к содержимому ячеек, нужно индексировать массив ячеек при помощи фигурных скобок. При обычной индексации круглыми скобками мы из массива ячеек извлекаем отдельную ячейку. Напоминаем ещё раз о том, что следует чётко различать саму ячейку и её содержимое ( см. выше ).
Массивы ячеек полностью решают типовую задачу хранения нескольких строковых данных под одним именем. Раньше мы уже формировали матрицы типа char, каждая строка которых имела одну и ту же длину. Это очевидным образом ограничивает применение такого решения. В случае массива ячеек такого ограничения нет: