взлом

Открытая медицинская библиотека

Статьи и лекции по медицине ✚ Библиотека студента-медика ✚ Болезни и способы их лечения.

Хирургия Fieldnames( s ) - возвращает массив строк с именами всех полей
просмотров - 321

Структуры 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, каждая строка которых имела одну и ту же длину. Это очевидным образом ограничивает применение такого решения. В случае массива ячеек такого ограничения нет: