EDA365电子论坛网

标题: MATLAB中的结构数组 [打印本页]

作者: uperrua    时间: 2020-4-24 13:30
标题: MATLAB中的结构数组
本帖最后由 uperrua 于 2020-4-26 15:36 编辑
& E, T1 _& G! y( [# j
) D2 A5 c# d7 @. Z! z

结构数组:

    结构是包含一组记录的数据类型,而记录则是存储在相应的字段中。结构的字段可以是任意一种MATLAB数据类型的变量或者对象。结构类型的变量也可以是一维的、二维的或多维的数组。结构数组也称为架构数组。不过,在访问结构类型数据的元素时,需要使用下标配合字段的形式。

    可以在一个数组中放置各类的数据,并且一个结构数组还能是另一个结构数组的一部分。相比较而言,比元胞数组更为强大,也更加富于变化。

    (1)直接赋值法创建结构数组


7 O6 ^9 C, C$ h# p

>> employee.name='tiger';0 Z# P$ k( f( g4 o" O$ ]: E
>> employee.sex='male';
7 {& F' H6 i; K& m: ~: S, [>> employee.age='24';
6 R0 Z) X1 ?* v8 z  I9 |2 s>> employee.number='12345';
2 s, X4 k" A  W: T, T' s' s>> employee

employee =

      name: 'tiger'% C- x1 X$ l1 T; N( |" e
       sex: 'male'
, k3 H+ Q/ ?: D1 ]* x, h       age: '24': N5 j' {/ H  H! j8 k
    number: '12345'

     employee是一种结构。可以容纳更多的元素,可以自由地向结构中加入元素。


7 Y  P& p7 f0 a  I

>> employee(2).name='lee';. V1 V- {! B  d+ q2 R
>> employee(2).sex='female';( Q" T" G  o4 |3 c7 h& w/ W* y! C
>> employee(2).age='32';
% g( T" c. r8 s" Z& j7 v8 w9 w: F>> employee(2).number='82356';
- J' [( z% {5 B>> employee(2)

ans =

      name: 'lee'
* y7 C- b( l  p& k3 a6 R8 B1 M3 a! \       sex: 'female'
1 M% F; ~3 ?+ N8 Y% G# A: Y2 u3 _       age: '32'7 ]5 v0 [9 L. T" H. I
    number: '82356'

4 @0 Q) u5 p+ B- `  V5 V" C4 ?" i. u! t

> employee

employee =

1x2 struct array with fields:$ p( O8 U9 Q9 q/ x. C' M
    name1 ?5 @) @2 j. n; M! r1 G
    sex
' w0 s0 t) w: d6 x( \    age" j+ \7 _/ ^* ~
    number

- \, A: }8 I8 }/ Y7 `( j

  (2)用struct函数创建结构数组

  使用struct函数,可以根据指定的字段及其相应的值创建结构体数组。此函数的一般形式为:

  str_array=struct('field1',{val1},'field2',{val2}...);

  (3)结构数组中的数据获取

  使用结构数组索引,能获取结构数组中的任何字段值或字段元素。相似地,可以给任何字段或字段单元赋值。在结构数组名后面添加索引范围,可以获取子数组。

, {* K* L: s( Y. I3 F% O

>> list.ID=123;8 Y2 T5 p. w+ v" K$ p* D4 N
>> list.sex='male';
7 ^1 l7 P: \) W* H( ^; y, D& @>> list.age=25;
5 Q; Y) r3 @; p+ l4 W>> list

list =

     ID: 123, n/ h6 F" ^* D6 }% g3 A; ?
    sex: 'male'& ]8 G& m! C# F8 E9 ^: ]
    age: 25

>> list(2).ID=456;
8 J: ~5 v- h/ b3 s  R) D>> list(2).sex='female';4 J& E8 ~8 g5 q" q+ _
>> list(2).age=32;;0 v$ U; w* a2 x; d( P9 y3 O
>> list2=list(1:2)

list2 =

1x2 struct array with fields:2 ^; ?' b5 s/ U! c
    ID. `# a8 ?+ r/ d6 B0 X
    sex6 B, P3 f# j! k5 C5 T. x0 [
    age

5 `. ^7 j: R6 _- A

>> list2(1)

ans =

     ID: 123; g# j8 m. p) }% g( q" O
    sex: 'male'
6 a3 e& ?9 I# I5 Z    age: 25

>> str=list2.sex

str =

male

>> ages=[list.age]

ages =

    25    32


: A: u$ X: M# x6 ~7 `& o- H' J# z5 }5 g+ }4 p7 O6 {' R& S! B0 `( e* S% w* L
4 m! s4 z  v& H* q; A$ e, j# {4 V

(4)结构数组中的操作

对于结构的基本操作其实是对结构数组元素包含记录的操作。主要有结构记录数据的访问、字段的增加和删除等。访问结构数组元素包含记录的方法很简单,直接使用结构数组的名臣和字段的名臣以及操作符“.”完成相应的操作即可。不过,在访问结构数组的元素时,可以使用所谓的“动态”字段的形式。

Struct_name.(expression)

>> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});0 P( ^" E" x: [9 C1 `  M, ?
>> student

student =

1x2 struct array with fields:
+ U+ U+ q4 b- x5 e5 G: B  t  R0 l    name9 S3 F9 I& H* U& W) E
    age+ y. O2 f) |) {! E; T$ [) E0 U: X5 L
    ID4 W: y! ]) }. D1 {5 M8 f
    score

>> student(2).score

ans =

    7.9221    0.3571    6.7874
: B6 _% W( q  M2 E$ I, _2 x3 l    9.5949    8.4913    7.5774$ S7 M  v$ J+ k
    6.5574    9.3399    7.4313

>> student(1).score(1,: )

ans =

    9.6489    9.5717    1.4189

>> student.name

ans =

aaa


. ^( A/ R! M" w$ j5 S5 aans =

bbb

>> student.('name')

ans =

aaa


! Y; s7 |6 C6 L) q4 @& Aans =

bbb

(5)结构操作函数

struct:创建结构或将其他数据类型转变成结构

fieldnames:获取结构的字段名称

getfield:获取结构的字段数据

setfield:设置结构的字段数据

rmfield:删除结构的指定字段

isfield:判断给定的字符串是否为结构的字段名称

isstruct:判断给定的数据对象是否为结构类型

orderfields:将结构字段排序

(6)结构数组的大小

    使用size函数可以获取结构数组或任何结构字段的大小。给定一个结构数组名作为变量,size返回一个数组的维向量。给定array(n).field形式的变量,size函数返回一个包含字段内容大小的向量。

(7)结构数组的嵌套

    一个结构字段能包含另外一个结构,甚至是另外的结构数组。一旦创建了一个结构,就可以使用struct函数或赋值语句,在已经存在的结构字段中嵌套结构。

    要创建嵌套的的结构有两种方法:一维勇struct函数创建嵌套结构;二是索引嵌套的结构:

    struct函数创建嵌套结构:

- E1 i6 w- M) K4 k7 m2 X

>> 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]* S0 _& K! e; u
    nest: [1x1 struct]

    添加元素

8 Q! F3 g4 E# \2 Y% t

>> A(2).data=[1 3 3;4 5 5];2 y4 N, |8 |- A8 X
>> A.data

ans =

     1     2     3
' X. b' |3 C( D' P+ X# [     4     5     6


  Y) d. ?2 U% R7 _' P: R' ]ans =

     1     3     3
) b2 g  P2 n  u' I8 ^     4     5     5

>> A(2).nest.testnum='test2';
5 X6 @5 P( @2 L) q- Z>> A(2).nest.xdata=[4 3 2];( W/ _* n: U9 y8 \
>> A(2).nest.ydata=[6 9 8];
% M& W' S; Y% C2 b# ]4 ^5 i& J0 O>> A.nest

ans =

    testnum: 'test'
- ]. O) z# C, R" b! j      xdata: [7 8 9]6 b, b/ }; O. G" q& i
      ydata: [10 11 12]


9 H4 W: S8 J" d0 X& \ans =

    testnum: 'test2'& X; Z+ V3 U4 ], I! c
      xdata: [4 3 2]7 N. l1 z9 k) m$ C/ V6 I' |
      ydata: [6 9 8]

>>

要索引嵌套的结构,用.标记添加嵌套的字段名。索引表达式中的第一个文本字符串确认结构数组,后面的表达式获取包含其他结构的字段名。

A(1).nest

A(2).nest.xdata

: y& Z3 Y- `  t5 m- b4 L. ^% Z5 d

作者: NingW    时间: 2020-4-24 15:01
MATLAB中的结构数组
作者: Neken    时间: 2020-4-26 15:34
7 \' b3 G4 K3 w
MATLAB中的结构数组




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2