MATLAB struct結構體的應用

2021-09-05 09:59:15 字數 3358 閱讀 8626

與建立數值型陣列一樣,建立新struct物件不需要事先申明,可以直接引用,而且可以動態擴充。比如建立乙個複數變數x:

x.real = 0; % 建立欄位名為real,並為該字段賦值為0

x.imag = 0 % 為x建立乙個新的字段imag,並為該字段賦值為0

x =real: 0

imag: 0

然後可以將其動態擴充為陣列:

x(2).real = 0; % 將x擴充為1×2的結構陣列

x(2).imag = 0;

在任何需要的時候,也可以為陣列動態擴充字段,如增加欄位scale:

x(1).scale = 0;

這樣,所有x都增加了乙個scale欄位,而x(1)之外的其他變數的scale欄位為空:

x(1) % 檢視結構陣列的第乙個元素的各個欄位的內容

ans =

real: 0

imag: 0

scale: 0

x(2) % 檢視結構陣列的第二個元素的各個欄位的內容,注意沒有賦值的字段為空

ans =

real: 0

imag: 0

scale:

應該注意的是,x的real、imag、scale欄位不一定是單個資料元素,它們可以是任意資料型別,可以是向量、陣列、矩陣甚至是其他結構變數或元胞陣列,而且不同字段之間其資料型別不需要相同。例如:

clear x; 

x.real = [1 2 3 4 5];

x.imag = ones(10,10);

陣列中不同元素的同一欄位的資料型別也不要求一樣:

x(2).real = '123';

x(2).imag = rand(5,1);

甚至還可以通過引用陣列欄位來定義結構資料型別的某欄位:

x(3).real = x(1); 

x(3).imag = 3;

x(3)

ans =

real: [1x1 struct]

imag: 3

使用struct函式也可以建立結構,該函式產生或把其他形式的資料轉換為結構陣列。

struct的使用格式為:

s = struct('field1',values1,'field2',values2,…);

該函式將生成乙個具有指定欄位名和相應資料的結構陣列,其包含的資料values1、valuese2等必須為具有相同維數的資料,資料的存放位置域其他結構位置一一對應的。對於struct的賦值用到了元胞陣列。陣列values1、values2等可以是元胞陣列、標量元胞單元或者單個數值。每個values的資料被賦值給相應的field欄位。

當valuesx為元胞陣列的時候,生成的結構陣列的維數與元胞陣列的維數相同。而在資料中不包含元胞的時候,得到的結構陣列的維數是1×1的。例如:

s = struct('type',,'color',,'x',)

s =

1x2 struct array with fields:

type

color

x

得到維數為1×2的結構陣列s,包含了type、color和x共3個字段。這是因為在struct函式中、和都是1×2的元胞陣列,可以看到兩個資料成分分別為:

s(1,1)

ans =

type: 'big'

color: 'blue'

x: 3

s(1,2)

ans =

type: 'little'

color: 'red'

x: 4

相應的,如果將struct函式寫成下面的形式:

s = struct('type',,'color',,'x',)

s =

2x1 struct array with fields:

type

color

x

則會得到乙個2×1的結構陣列。

結構體的賦值,這裡不建議用下面這種形式進行統一賦值

s = sturct('field1',values1,'field2',values2,…)

而是建議直接賦值,就是對每乙個屬性進行單獨賦值,因為每乙個屬性的長度不同,所以,直接賦值,就省去了宣告的過程,方便,快捷;

例如我們要宣告下面的結構體:

example.adress='北京';

example.age='18歲'

直接輸入以上語句便可。

>> example

example =

adress: '北京'

age: '18歲'

結構體值的顯示:

如果我們要檢視結構體的所有值,那麼可以直接輸入結構體的名字,然後回車,就可以列出結構體的每項的名稱和值,如果要顯示某乙個屬性,通過單獨呼叫,例如example.name,便會顯示其名稱。

>> example.name

ans =

結構體的屬性增加刪除:

如果我們要刪除結構體的某一項屬性,那麼可以通過函式rmfield,來實現,如果要增加乙個屬性,那麼可以直接進行賦值便可。

>> example=rmfield(example,'age')

example =

adress: '北京'

>> example.salary='15000'

example =

adress: '北京'

salary: '15000'

結構體欄位名稱的獲取以及判斷:

假如我們想要知道這個結構體具體有多少字段(屬性),我們可以通過函式fieldnames來獲取欄位名稱,同時我們也可以通過函式isfield來判斷是否存在某一字段。

>> fieldnames(example)

ans =

'name'

'adress'

'salary'

>> isfield(example,'salary')

ans =

1>> isfield(example,'home')

ans =

0

matlab struct相關操作

生成有6個字段的結構體,各欄位內容為空 control struct filename en c out c in a f 為字段填充內容,填充的可以為常數或矩陣 control.filename name.filename 1 end 4 control.en en control.c out c...

結構體型別 結構體變數 結構體陣列 結構體指標

問題1 一元錢換為1 2 5分的硬幣,有多少種兌換方?本題要點分析及參 對各種可能情況進行一一測試。這是實現迴圈的一種方式 窮舉法 但實際上只有只有餘額才能兌換成其它面值的硬幣 main 注意換行的控制和每列的對齊 問題3 某鐵路線上有10個站,需要準備多少種客票?main b a 0 p prin...

結構體 結構體陣列

void test 函式遞迴呼叫 允許函式體裡再次呼叫函式本身 使用遞迴一定要有出口 long fact int n return n fact n 1 定義乙個新的資料型別 struct mypoint 結構體型別所占用的記憶體空間是最大資料型別的整數倍。因為結構體型別的變數在分配記憶體時有記憶體...