- MATLAB從基礎(chǔ)到精通
- 王薇編著
- 962字
- 2019-01-01 12:47:29
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
- Java語(yǔ)言程序設(shè)計(jì)
- Java程序設(shè)計(jì)與開(kāi)發(fā)
- 微信公眾平臺(tái)與小程序開(kāi)發(fā):從零搭建整套系統(tǒng)
- 軟件測(cè)試項(xiàng)目實(shí)戰(zhàn)之性能測(cè)試篇
- 營(yíng)銷(xiāo)數(shù)據(jù)科學(xué):用R和Python進(jìn)行預(yù)測(cè)分析的建模技術(shù)
- JSP開(kāi)發(fā)案例教程
- FLL+WRO樂(lè)高機(jī)器人競(jìng)賽教程:機(jī)械、巡線(xiàn)與PID
- C#程序設(shè)計(jì)基礎(chǔ):教程、實(shí)驗(yàn)、習(xí)題
- Python數(shù)據(jù)結(jié)構(gòu)與算法(視頻教學(xué)版)
- ASP.NET Core 2 Fundamentals
- ArcGIS for Desktop Cookbook
- Go語(yǔ)言從入門(mén)到精通
- OpenCV Android開(kāi)發(fā)實(shí)戰(zhàn)
- 基于Docker的Redis入門(mén)與實(shí)戰(zhàn)
- SAP HANA Cookbook