EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 uperrua 于 2020-4-26 15:36 编辑
5 b7 H, s1 U7 l' Y1 J. \' G$ z7 m% q+ }
结构数组: 结构是包含一组记录的数据类型,而记录则是存储在相应的字段中。结构的字段可以是任意一种MATLAB数据类型的变量或者对象。结构类型的变量也可以是一维的、二维的或多维的数组。结构数组也称为架构数组。不过,在访问结构类型数据的元素时,需要使用下标配合字段的形式。 可以在一个数组中放置各类的数据,并且一个结构数组还能是另一个结构数组的一部分。相比较而言,比元胞数组更为强大,也更加富于变化。 (1)直接赋值法创建结构数组
. |8 ~6 Q; ^- j>> employee.name='tiger';% |$ S1 t0 @0 R5 e- u* `
>> employee.sex='male';$ M& W0 [" z/ l/ ^- o! B2 A; K7 ?
>> employee.age='24';
0 \) G. H% Q% i. Q8 d7 I( D>> employee.number='12345'; V9 b: l( |7 U0 e& e. t$ C, T# A9 R
>> employee employee = name: 'tiger'
* H2 f/ w! b% c. C3 ^* `0 r& w1 ] sex: 'male'" q+ s/ }0 E( `/ U7 O" |9 Z
age: '24'7 `0 S! y9 Y$ B o1 ~9 l1 t
number: '12345' employee是一种结构。可以容纳更多的元素,可以自由地向结构中加入元素。
( s2 Y( I* c9 Z$ K9 j>> employee(2).name='lee';7 h! j8 G7 ?8 p3 w8 d3 F# ? @
>> employee(2).sex='female';
; x1 J( a1 x& ~* S0 f>> employee(2).age='32';3 V' h, X' G F' `4 n/ W! T
>> employee(2).number='82356';1 @7 A9 q5 i' a/ A( R! t% G- X& o
>> employee(2) ans = name: 'lee'& t( F. A8 E3 P$ r
sex: 'female'+ [5 L# n9 `, R F
age: '32'
9 a: F. D8 u: x number: '82356'
0 J" m0 }7 N# J8 M* ?' b" n) A5 a+ M> employee employee = 1x2 struct array with fields:
+ E [! b- ?% `$ Q8 u2 U* C name$ k5 C' v0 A) ] ]& i
sex
# L* y. s# S7 w( z' |' L( |5 c age
- w3 w3 e5 D# X1 f% M number
# M0 `) `, o. i$ W, |7 d9 p4 Y (2)用struct函数创建结构数组 使用struct函数,可以根据指定的字段及其相应的值创建结构体数组。此函数的一般形式为: str_array=struct('field1',{val1},'field2',{val2}...); (3)结构数组中的数据获取 使用结构数组索引,能获取结构数组中的任何字段值或字段元素。相似地,可以给任何字段或字段单元赋值。在结构数组名后面添加索引范围,可以获取子数组。 1 w$ g" ~- k4 ^5 y5 s; S) z" ]* I
>> list.ID=123;# f1 p- u# V8 M* Z9 q) j9 \3 `' G: s
>> list.sex='male';
7 U( A2 Q/ O" Y, B& G( f* o8 H>> list.age=25;% R* `5 d$ j8 w) m" b. Z d/ O
>> list list = ID: 123
1 y, U0 g# x( P9 t sex: 'male'# h7 J9 V& I. [. U5 T6 R3 g5 U
age: 25 >> list(2).ID=456;
) n! r& p+ M) @>> list(2).sex='female';: d: k5 _" h8 m8 p5 X# E
>> list(2).age=32;;
2 s3 K% E& u, ]* ]>> list2=list(1:2) list2 = 1x2 struct array with fields:
2 S) H) x8 q& l7 @1 X ID
( d N) \3 I( j sex
2 c$ w# P& Y& m9 H% q& o; m age 8 w7 W, b0 G) D# y# S1 T
>> list2(1) ans = ID: 123
2 |' g, _1 R( I sex: 'male'
- D7 ^6 C. `& g( b age: 25 >> str=list2.sex str = male >> ages=[list.age] ages = 25 32 * S4 n: ^9 k" Y3 c7 ]
5 A" Q' ^' f% F3 T! G6 Q. b
% _& b- t( k2 u# s E(4)结构数组中的操作 对于结构的基本操作其实是对结构数组元素包含记录的操作。主要有结构记录数据的访问、字段的增加和删除等。访问结构数组元素包含记录的方法很简单,直接使用结构数组的名臣和字段的名臣以及操作符“.”完成相应的操作即可。不过,在访问结构数组的元素时,可以使用所谓的“动态”字段的形式。 Struct_name.(expression) >> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});
, P+ z* g X9 E0 W( g5 h7 G>> student student = 1x2 struct array with fields:
2 I6 [6 c, F$ G6 g name
. n3 W- g# \' Q1 ^$ S! R r" e: v age& `% X8 G3 K! X7 m
ID
; S: t! [$ x( a+ M8 E7 k& O1 {6 r score >> student(2).score ans = 7.9221 0.3571 6.78740 W* r& r6 m6 W" ~! v0 @
9.5949 8.4913 7.57741 `3 G+ W* R' J! C! P9 c1 k; z: z, s
6.5574 9.3399 7.4313 >> student(1).score(1,: ) ans = 9.6489 9.5717 1.4189 >> student.name ans = aaa
) H$ u) E( C- l8 t2 {4 bans =
bbb >> student.('name') ans = aaa
) I @1 S( F* I R7 n3 Kans =
bbb (5)结构操作函数 struct:创建结构或将其他数据类型转变成结构 fieldnames:获取结构的字段名称 getfield:获取结构的字段数据 setfield:设置结构的字段数据 rmfield:删除结构的指定字段 isfield:判断给定的字符串是否为结构的字段名称 isstruct:判断给定的数据对象是否为结构类型 ordeRFields:将结构字段排序 (6)结构数组的大小 使用size函数可以获取结构数组或任何结构字段的大小。给定一个结构数组名作为变量,size返回一个数组的维向量。给定array(n).field形式的变量,size函数返回一个包含字段内容大小的向量。 (7)结构数组的嵌套 一个结构字段能包含另外一个结构,甚至是另外的结构数组。一旦创建了一个结构,就可以使用struct函数或赋值语句,在已经存在的结构字段中嵌套结构。 要创建嵌套的的结构有两种方法:一维勇struct函数创建嵌套结构;二是索引嵌套的结构: struct函数创建嵌套结构:
& `9 l0 S7 A, r3 V. P; k6 a+ r: W% m>> A=struct('data',[1 2 3;4 5 6],'nest',struct('testnum','test','xdata',[7 8 9],'ydata',[10 11 12])) A = data: [2x3 double], D$ f& I- }9 K2 r0 o& ?3 r2 V
nest: [1x1 struct] 添加元素
& T) K( Y+ A2 Q, t: W: X$ r>> A(2).data=[1 3 3;4 5 5];
/ d. p) q# X, x' F# j2 m8 D8 q>> A.data ans = 1 2 3
/ H3 Y* q5 K2 R/ O 4 5 6
9 {/ `4 t4 z* u7 |% g0 aans =
1 3 3
1 f% V3 y8 `) W7 Z4 Q- p 4 5 5 >> A(2).nest.testnum='test2';7 T8 z$ w8 K( z" j
>> A(2).nest.xdata=[4 3 2];% Y6 M9 d2 g3 j% M& a" P R
>> A(2).nest.ydata=[6 9 8];" ]8 M" h) u6 G
>> A.nest ans = testnum: 'test'
9 P$ i3 V( L7 t5 B xdata: [7 8 9]) S6 U! _" K1 a Z# N/ F/ U
ydata: [10 11 12]
9 f1 B" }& B) T( e- h' nans =
testnum: 'test2'. p, c3 ^% ~! X8 }1 ]6 F
xdata: [4 3 2]
. b. [' r( y: E$ o( l, N+ `, t ydata: [6 9 8] >> 要索引嵌套的结构,用.标记添加嵌套的字段名。索引表达式中的第一个文本字符串确认结构数组,后面的表达式获取包含其他结构的字段名。 A(1).nest A(2).nest.xdata - i% B$ v3 @+ J! n
|