1.架构数组元素的引用
架构数组元素可以通过架构数组的名称、下标、域名来引用。具体格式为:架构数组名(下标).域名
2.动态域名
动态域名(域名是字符串变量)的情况,用help paren命令,有关于动态域名说明。
3.域值操作函数
(1)获取架构数组的域名
NAMES = fieldnames (S) : 返回一个元胞数组NAMES,NAME{i}是架构数组S的第i个域名(字符串),因此,NAMES是一个由字符串组成的元胞数组
(2)获取域值
F = getfield(S,‘field’) :获取单架构S由‘field’指定的域的域值,注意:S必须是1x1的架构数组,等价于语句F = S.field。
F = getfield (S,{i,j},‘field’,{k}):等价于F = S(i,j).field(k),注意花括号和圆括号的使用。
(3)设置域值
S = setfield(S,‘field’,V):等价于S.field=V。将单架构S由’field’指定的域的域值设置为V,注意:S必须是1x1的架构数组格式
S = setfield (S,{i,j},‘field’,{k},V) :等价于S(i,j).field(k)=V
4.架构数组的扩充和收缩
(1)域的增加和删除
①S = rmfield(S,‘field’):从架构数组S中删除域field,删除架构数组的域是对整个架构数组实施的。删除子域只影响被操作的那个架构,而不影响整个架构数组。
②增加域的操作影响整个架构数组,但增加子域的操作只能影响被操作的那个架构,而不影响整个架构数组
(2)与架构数组有关的两个逻辑函数
isstruct(S):如果S是架构数组,返回1,否则返回0
isfield(S,‘field’):如果field是架构数组S的域名,则返回1,否则返回0
(3)help datatypes命令可以了解有哪些数据类型及相应的转换函数、数据类型判断函数、元胞数组的基本函数、架构数组的基本函数、数组函数、函数句柄的基本函数
例题:
>> S.Name='Li Ming'; S.No='19990101';S.Class='199901';
S(2).Name='Zhang Mei'; S(2).No='19990102';
S(2).sex='F'; S(2).exams=[90 82 88];
>> S(2).average=mean(S(2).exams)
S =
包含以下字段的 1×2 struct 数组:
Name
No
Class
sex
exams
average
%①为S(1)增加导师域,然后查看S(1).Supervisor,S(2).Supervisor
%增加域的操作影响整个架构数组,但增加子域的操作只影响被操作的那个架构,而不影响整个架构数组
>> S(1).Supervisor.No='01065';
S(1). Supervisor.Name='A';
S(1). Supervisor.Course={'Matlab', 'Computer Graphics', 'CAGD'};
>> S(1).Supervisor,S(2).Supervisor
ans =
包含以下字段的 struct:
No: '01065'
Name: 'A'
Course: {'Matlab' 'Computer Graphics' 'CAGD'}
ans =
[]
%②再为S(2).Supervisor赋值,然后查看S(1).Supervisor,S(2).Supervisor
>> S(2). Supervisor=struct('No',01066, 'Name', 'B', 'Course',{ {'C', 'C++' } });
>> S(1).Supervisor,S(2).Supervisor
ans =
包含以下字段的 struct:
No: '01065'
Name: 'A'
Course: {'Matlab' 'Computer Graphics' 'CAGD'}
ans =
包含以下字段的 struct:
No: 1066
Name: 'B'
Course: {'C' 'C++'}
%③删除架构数组S的sex和average两个域然后查看S(1)和S(2)
%删除架构数组的域是对整个架构数组实施的
>> S=rmfield(S,{'sex', 'average'});
>> S(1),S(2)
ans =
包含以下字段的 struct:
Name: 'Li Ming'
No: '19990101'
Class: '199901'
exams: []
Supervisor: [1×1 struct]
ans =
包含以下字段的 struct:
Name: 'Zhang Mei'
No: '19990102'
Class: []
exams: [90 82 88]
Supervisor: [1×1 struct]
%④删除S(1).Supervisor中的Course然后查看S(1).Supervisor,S(2).Supervisor
%删除子域的操作只影响被操作的那个架构,而不影响整个架构数组
>> S(1).Supervisor=rmfield(S(1).Supervisor,'Course');
>> S(1).Supervisor,S(2).Supervisor
ans =
包含以下字段的 struct:
No: '01065'
Name: 'A'
ans =
包含以下字段的 struct:
No: 1066
Name: 'B'
Course: {'C' 'C++'}
%⑤删除Supervisor域再查看S(1)与S(2)
>> S=rmfield(S,'Supervisor');
>> S(1),S(2)
ans =
包含以下字段的 struct:
Name: 'Li Ming'
No: '19990101'
Class: '199901'
exams: []
ans =
包含以下字段的 struct:
Name: 'Zhang Mei'
No: '19990102'
Class: []
exams: [90 82 88]