官术网_书友最值得收藏!

2.6 結(jié)構(gòu)體

結(jié)構(gòu)體數(shù)據(jù)類(lèi)型可以把不同數(shù)據(jù)類(lèi)型的變量放到同一個(gè)變量名下,通過(guò)不同“域”的概念對(duì)結(jié)構(gòu)體中的不同數(shù)據(jù)進(jìn)行賦值、操作。結(jié)構(gòu)體中的數(shù)據(jù)存儲(chǔ)在相應(yīng)的“域”中。

2.6.1 結(jié)構(gòu)體的生成

結(jié)構(gòu)體類(lèi)型數(shù)據(jù)生成的方法主要有命令行直接賦值法和函數(shù)法。命令行直接賦值法是指直接把不同類(lèi)型的數(shù)據(jù)賦值給結(jié)構(gòu)體變量不同的域中;函數(shù)法是指通過(guò)MATLAB中自帶的函數(shù)struct()創(chuàng)建結(jié)構(gòu)體變量。下面分別通過(guò)這兩種方法來(lái)創(chuàng)建結(jié)構(gòu)體類(lèi)型的變量。

1.命令行直接賦值法

通過(guò)命令行直接賦值即直接給結(jié)構(gòu)體中的不同域賦值,結(jié)構(gòu)與域之間用點(diǎn)號(hào)“.”連接,不同域中可保存不同數(shù)據(jù)類(lèi)型的變量。下面以實(shí)例演示通過(guò)命令行直接創(chuàng)建結(jié)構(gòu)體變量。

【例2.22】命令行直接賦值法生成結(jié)構(gòu)體。

>> ss.str='ABC';
>> ss.num=[5:2:16];
>> ss.str2=['A','S' ,'BS'];
>> ss
ss =
    str: 'ABC'
    num: [5 7 9 11 13 15]
    str2: 'ASBS'
2.函數(shù)法

MATLAB中提供了struct()函數(shù)創(chuàng)建結(jié)構(gòu)體,具體用法如下。

s = struct('field1', values1, 'field2', values2, ...)

其中,“'field1'”和“'field2'”為域名,“values1”和“values2”為域中的值。

【例2.23】函數(shù)法生成結(jié)構(gòu)體。

>> ss=struct('str','ABC','num',[5:2:16],'str2',['A','S' ,'BS'])
ss =
    str: 'ABC'
    num: [5 7 9 11 13 15]
    str2: 'ASBS'

2.6.2 結(jié)構(gòu)體的操作

結(jié)構(gòu)體的常用操作包括對(duì)結(jié)構(gòu)體元素的訪問(wèn)、結(jié)構(gòu)體的顯示、結(jié)構(gòu)體的刪除。下面將具體敘述結(jié)構(gòu)體的常用操作。

1.訪問(wèn)結(jié)構(gòu)體中的元素

【例2.24】訪問(wèn)結(jié)構(gòu)體中的元素。

>> ss=struct('stu_name',{'wang','ma','li'},'stu_num',
{100,101,102},'stu_age',{22,24,22})
ss =
1x3 struct array with fields:
    stu_name
    stu_num
    stu_age
>> ss(:,1)  %訪問(wèn)結(jié)構(gòu)體ss中的第一列元素
ans =
    stu_name: 'wang'
    stu_num: 100
    stu_age: 22
>> ss.stu_name %訪問(wèn)結(jié)構(gòu)體ss中的域stu_name
ans =
wang
ans =
ma
ans =
li
>> ss(1).stu_name %訪問(wèn)結(jié)構(gòu)體ss中第1列的域stu_name
ans =
wang
2.結(jié)構(gòu)體的顯示

MATLAB中提供了fieldnames()函數(shù)顯示結(jié)構(gòu)體的域名,而getfield()函數(shù)可用于顯示結(jié)構(gòu)體各域中的具體內(nèi)容。這兩個(gè)函數(shù)的具體用法如下。

● names = fieldnames(s):返回結(jié)構(gòu)體s中的各域名到變量names。

● f = getfield(s,'field'):顯示結(jié)構(gòu)體s中域field的具體內(nèi)容,返回到變量f中,s必須為1×1的結(jié)構(gòu)體。

【例2.25】結(jié)構(gòu)體的顯示。

>> ss=struct('stu_name',{'wang','ma','li'},'stu_num',
{100,101,102},'stu_age',{22,24,22});
>> names = fieldnames(ss) % fieldnames()函數(shù)顯示結(jié)構(gòu)體ss中的域名
names =
    'stu_name'
    'stu_num'
    'stu_age'
>> ss2=struct('str','ABC','num',[5:2:16],'str2',['A','S' ,'BS']);
>> whos ss ss2   %結(jié)構(gòu)體ss、ss2的大小
  Name   Size          Bytes Class
  ss    1x3            796 struct array
  ss2    1x1            434 struct array
Grand total is 39 elements using 1230 bytes
>> f = getfield(ss,'stu_name') %結(jié)構(gòu)體ss大小1×3不可用函數(shù)getfield顯示域中的內(nèi)容
??? Illegal right hand side in assignment.Too many elements.
Error in ==> getfield at 38
    f = s.(deblank(strField)); % deblank field name
>> f = getfield(ss2,'str') % ss2大小1×1可用函數(shù)getfield顯示域中的內(nèi)容
f =
ABC
3.結(jié)構(gòu)體的刪除

結(jié)構(gòu)體的刪除使用函數(shù)rmfield,其具體用法如下。

● s = rmfield(ss,'field'):用于刪除結(jié)構(gòu)體中的域“field”。

● s = rmfield(ss,FIELDS):用于同時(shí)刪除結(jié)構(gòu)體中的多個(gè)域,F(xiàn)IELDS為需要?jiǎng)h除的多個(gè)域的域名的字符串。

【例2.26】結(jié)構(gòu)體的刪除。

>> ss=struct('stu_name',{'wang','ma','li'},'stu_num',{100,101,102},
'stu_age',{22,24,22});
>> s = rmfield(ss,'stu_name')
s =
1x3 struct array with fields:
    stu_num
    stu_age
>> s2 = rmfield(ss,{'stu_name','stu_age'})
s2 =
1x3 struct array with fields:
    stu_num
主站蜘蛛池模板: 察雅县| 保山市| 马龙县| 松滋市| 唐河县| 莱阳市| 渝中区| 江阴市| 民权县| 拉孜县| 常宁市| 门源| 阿坝| 怀远县| 石渠县| 西青区| 怀仁县| 喜德县| 会同县| 新邵县| 马边| 九龙坡区| 西和县| 奉贤区| 股票| 白银市| 双鸭山市| 长治市| 平乡县| 洮南市| 临江市| 石狮市| 沭阳县| 高唐县| 奉节县| 岳普湖县| 合水县| 甘德县| 福安市| 岳西县| 穆棱市|