Преобразуйте массив ячеек в массив структур
structArray =
cell2struct(cellArray, fields, dim)
создает массив структур, structArray =
cell2struct(cellArray, fields, dim)structArray, из информации, содержащейся в массиве ячеек cellArray.
The fields аргумент задает имена полей для массива структур. Этот аргумент является символьным массивом, массивом ячеек векторов символов или строковых массивов.
The dim аргумент говорит MATLAB® какая ось массива ячеек будет использоваться при создании массива структур. Используйте числовое double для задания dim.
Чтобы создать массив структур с полями, производными от N строки массива ячеек, задайте N имена полей в fields аргумент и число 1 в dim аргумент. Чтобы создать массив структур с полями, производными от M столбцы массива ячеек, задайте M имена полей в fields аргумент и число 2 в dim аргумент.
The structArray выход - массив структур с N полей, где N равно количеству полей в fields входной параметр. Количество полей в получившейся структуре должно равняться количеству камер по размерности dim который вы хотите преобразовать.
Создайте следующую таблицу для использования с примерами в этом разделе. В таблице перечислены сведения о сотрудниках небольшой инжиниринговой компании. Чтение таблицы по строкам показывает имена сотрудников по подразделениям. Чтение таблицы по столбцам показывает количество лет, в течение которых каждый сотрудник работал в компании.
| 5 лет | 10 лет | 15 лет | |
|---|---|---|---|
| Развитие | Ли, Рид, Хилл | Дин, Фрай | Лейн, Фокс, Кинг |
| Продажи | Хау, Бернс | Кирби, Форд | Зал |
| Управление | Цена | Кларк, Ши | Симс |
| Качество | Бейтс, Грей | Нэш | Кей, Чейз |
| Документация | Ллойд, Янг | Райан, Харт, Рой | Болото |
Введите следующие команды, чтобы создать начальный массив ячеек employees:
devel = {{'Lee','Reed','Hill'}, {'Dean','Frye'}, ...
{'Lane','Fox','King'}};
sales = {{'Howe','Burns'}, {'Kirby','Ford'}, {'Hall'}};
mgmt = {{'Price'}, {'Clark','Shea'}, {'Sims'}};
qual = {{'Bates','Gray'}, {'Nash'}, {'Kay','Chase'}};
docu = {{'Lloyd','Young'}, {'Ryan','Hart','Roy'}, {'Marsh'}};
employees = [devel; sales; mgmt; qual; docu]
employees =
{1x3 cell} {1x2 cell} {1x3 cell}
{1x2 cell} {1x2 cell} {1x1 cell}
{1x1 cell} {1x2 cell} {1x1 cell}
{1x2 cell} {1x1 cell} {1x2 cell}
{1x2 cell} {1x3 cell} {1x1 cell}Это получившийся массив ячеек:

Преобразуйте массив ячеек в struct по размерности 1:
Преобразуйте массив ячеек 5 на 3 вдоль его первой размерности, чтобы создать массив структур 3 на 1 с 5 полями. Каждая из строк по размерности 1 массива ячеек становится полем в массиве структур:

При прохождении первого (т.е. вертикального) размерности существует 5 строк с заголовками строк, которые читаются следующим образом:
rowHeadings = {'development', 'sales', 'management', ...
'quality', 'documentation'};
Преобразуйте массив ячеек в массив структур, depts, в отношении этой размерности:
depts = cell2struct(employees, rowHeadings, 1)
depts =
3x1 struct array with fields:
development
sales
management
quality
documentation
Используйте эту структуру, ориентированную на строку, чтобы найти имена сотрудников, работающих в компании до 10 лет:
depts(1:2).development
ans =
'Lee' 'Reed' 'Hill'
ans =
'Dean' 'Frye'Преобразуйте тот же массив ячеек в struct по размерности 2:
Преобразуйте массив ячеек 5 на 3 вдоль его второго измерения, чтобы создать массив структур 5 на 1 с 3 полями. Каждый из столбцов размерности 2 массива ячеек становится полем в массиве структур:

Пройдите массив ячеек по второму (или горизонтальному) размерности. Поля заголовков столбца становятся полями получившейся структуры:
colHeadings = {'fiveYears' 'tenYears' 'fifteenYears'};
years = cell2struct(employees, colHeadings, 2)
years =
5x1 struct array with fields:
fiveYears
tenYears
fifteenYears
Используя структуру, ориентированную на столбцы, покажите, сколько сотрудников из отделов сбыта и документации проработали в компании не менее 5 лет:
[~, sales_5years, ~, ~, docu_5years] = years.fiveYears
sales_5years =
'Howe' 'Burns'
docu_5years =
'Lloyd' 'Young'
Преобразуйте только часть массива ячеек в struct:
Преобразуйте только первую и последнюю строки массива ячеек. Это приводит к массиву структур 3 на 1 с 2 полями:
rowHeadings = {'development', 'documentation'};
depts = cell2struct(employees([1,5],:), rowHeadings, 1)
depts =
3x1 struct array with fields:
development
documentation
Отображать сотрудников, которые относятся к этим отделам в течение всех трех периодов времени:
for k=1:3
depts(k,:)
end
ans =
development: {'Lee' 'Reed' 'Hill'}
documentation: {'Lloyd' 'Young'}
ans =
development: {'Dean' 'Frye'}
documentation: {'Ryan' 'Hart' 'Roy'}
ans =
development: {'Lane' 'Fox' 'King'}
documentation: {'Marsh'}cell | cell2table | fieldnames | iscell | isstruct | struct | struct2cell | table2struct