matlab数组_MATLAB的Structure数组域的基本操作4.3  Structure数组域的基本操作
MATLAB提供了部分函数⽤于结构数组域的操作,在表3-6中对这些函数进⾏了总结。
表3-6  结构数组操作函数
函    数说    明函    数说    明
struct创建结构数组或将其他数据类型转换为结构数组rmfield删除结构的指定域
fieldnames获取结构的域名isfield判断给定的字符串是否为结构的域名
getfield获取结构的域内容isstruct判断给定的数据对象是否为结构类型
setfield设置结构的域内容orderfields对结构域排序
【例3-17】  结构操作函数使⽤⽰例。
>> USPres.name = 'Franklin D. Roosevelt';
>> USPres.vp(1) = {'John Garner'};
>> USPres.vp(2) = {'Henry Wallace'};
>> USPres.vp(3) = {'Harry S Truman'};
>> = [1933, 1945];
>> USPres.party = 'Democratic';        %  创建包括4个域名的结构数组
>> presFields = fieldnames(USPres)      %  使⽤fieldnames函数获取现有域名
presFields =
'name'
'vp'
'term'
'party'
>> orderfields(USPres)      %  使⽤orderfields函数对域名按照字母顺序进⾏排序
ans =
name: 'Franklin D. Roosevelt'
party: 'Democratic'
term: [1933 1945]
vp: {'John Garner'  'Henry Wallace'  'Harry S Truman'}
>> mystr1 = getfield(USPres, 'name')      %  获取结构的域内容
mystr1 =
Franklin D. Roosevelt
>> mystr2= setfield(USPres, 'name', 'ted')    %  设置结构的域内容
mystr2=
vp: {'John Garner'  'Henry Wallace'  'Harry S Truman'}
term: [1933 1945]
party: 'Democratic'
4.4  Structure数组的操作
本⼩节对结构数组的操作进⾏深⼊的介绍。
1.结构数组的扩充和收缩
【例3-18】  结构数组的扩充与收缩⽰例。
(1)单结构的创建
>> USPres.name = 'Franklin D. Roosevelt';
>> USPres.vp(1) = {'John Garner'};
>> USPres.vp(2) = {'Henry Wallace'};
>> USPres.vp(3) = {'Harry S Truman'};
>> = [1933, 1945];
>> USPres.party = 'Democratic';        %  创建包括4个域名的结构数组
(2)结构数组的扩展
>> USPres(3,2).name='Richard P. Jackson'%  结构数组的扩展
USPres =
3x2 struct array with fields:
name
vp
term
party
(3)结构数组的收缩
>> USPres(2,:)=[]      %  通过对结构数组赋值为空矩阵来实现删除
USPres =
2x2 struct array with fields:
name
vp
term
party
2.增添域或删除域
增加结构数组域常⽤的⽅法就是对其直接赋值,如3.4.1⼩节中介绍的那样。⾄于域的删除,则必须使⽤rmfield函数才能够实现。【例3-19】  对结构数组进⾏域的增添和删减操作。
>> clear,for k=1:10;department(k).number=['No.',int2str(k)];end
>> department
department =
1x10 struct array with fields:
number
(2)在数组中任何⼀个结构上进⾏的域增添操作都将影响到整个结构数组。>> department(1).teacher=40;
>> department(1).student=300;
>> department(1).PC_computer=40;
>> department
department =
1x10 struct array with fields:
number
teacher
student
PC_computer
>> department(2)
ans =
number: 'No.2'
teacher: []
student: []
PC_computer: []
(3)增添⼦域的操作只影响被操作的那个具体结构,⽽不影响整个结构数组。>> department(2).teacher.male=35;    %  增添⼦域
>> department(2).teacher.female=13;    %  增添⼦域
>> D2T=department(2).teacher        %  第2 结构teacher 域包含两个⼦域D2T =
male: 35
female: 13
>> D1T=department(1).teacher    %  第1 结构teacher 域仅是⼀个数
D1T =
40
(4)删除⼦域的操作也只影响被操作的那个具体结构。
>> department(2).teacher=rmfield(department(2).teacher,'male');
>> department(2).teacher
ans =
female: 13
(5)删除域的操作是对整个结构数组进⾏的。
>> department=rmfield(department,'student')
department =
1x10 struct array with fields:
number
teacher
PC_computer
>> department=rmfield(department,{'teacher';'PC_computer'})
department =
1x10 struct array with fields:
number
3.数值运算操作和函数对结构数组的应⽤
如果结构数组域中的内容是数值型的⼀般矩阵,那么适⽤于⼀般矩阵的数值操作和函数也可以应⽤于结构数组。【例3-20】  数值运算操作和函数对结构数组的应⽤⽰例。
>> A.a=magic(3)        %  创建数值型的结构数组
A =
a: [3x3 double]
>> A.a
matlab数组赋值ans =
8    1    6
3    5    7
4    9    2
>> A.a.^2            %  运算符操作
ans =
64    1    36
9    25    49
16    81    4
>> sqrt(A.a)            %  函数操作
ans =
2.8284    1.0000    2.4495
1.7321
2.2361    2.6458
2.0000
3.0000    1.4142

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。