跳轉到內容

MATLAB 程式設計/陣列/結構體陣列

來自華夏公益教科書,自由的教科書

結構體簡介

[編輯 | 編輯原始碼]

MATLAB 提供了一種用於結構化資料元素的方法。結構體的建立和訪問方式與熟悉 C 語言程式設計的人員類似。

MATLAB 有多種方法來定義和訪問結構體欄位。有關更多詳細資訊,請參閱宣告結構體。

注意:結構體欄位名稱必須以字母開頭,區分大小寫。名稱的其餘部分可以包含字母、數字和下劃線字元。使用 namelengthmax 函式確定欄位名稱的最大長度。

宣告結構體

[編輯 | 編輯原始碼]

可以使用 struct 命令宣告結構體。

   >> a = struct('b', 0, 'c', 'test')
   a = 
     b: 0
     c: 'test'

在 MATLAB 中,變數不需要在使用前顯式宣告。因此,可以使用 '.' 運算子宣告結構體。

   >> a.c = 'test'
   a = 
     c: 'test'

結構體可以按需宣告,欄位也可以按需宣告。

結構體陣列

[編輯 | 編輯原始碼]

結構體也可以是陣列。以下是一個示例

   >> a = struct('b', 0, 'c', 'test');            % Create structure
   >> a(2).b = 1;                                 % Turn it into an array by creating another element
   >> a(2).c = 'testing'
        a =
          1x2 struct array with fields:
            b
            c
   >> a(1)                                        % Initial structure
        ans = 
          b: 0
          c: 'test'
   >> a(2)                                        % The second element
        ans = 
          b: 1
          c: 'testing'

訪問欄位

[編輯 | 編輯原始碼]

當欄位名稱已知時,可以直接訪問欄位值。

   >> a.c
       ans =
         test
       ans =
         testing

在某些情況下,您可能需要動態訪問欄位,這可以透過以下方式完成。

   >> str = 'c';
   >> a(1).(str)
       ans =
         test
   >> a(1).c
       ans =
         test
         

訪問陣列元素

[編輯 | 編輯原始碼]

可以使用陣列索引訪問結構體陣列中的任何給定元素,例如

   >> a(1).c
       ans =
         test

要訪問結構體陣列中的所有元素,請使用語法 {structure.field}。要獲取向量或陣列中的所有值,請使用方括號 ([]),如下所示。

   >> [a.('c')]
       ans =
         testtesting
   >> [a.('b')]
       ans =
          0     1

或者,您可以將它們全部放入一個元胞陣列(而不是將它們連線起來),如下所示

   >> {a.('c')}
   ans = {'test', 'testing'}

為每個結構體陣列元素的欄位賦值

[編輯 | 編輯原始碼]

Matlab 提供了為每個陣列元素的欄位賦值的工具。考慮以下結構體陣列

foo = struct('field_a',{1,2,3,4}, 'field_b',{4,8,12,16})

以下命令將相同的值分配給每個陣列元素的 field_b 欄位

value = 1;
[foo.field_b] = deal(value)

要將不同的值分配給每個陣列元素

value = {4,8,12,16};
[foo.field_b] = value{:}

透過邏輯定址進行子陣列操作

[編輯 | 編輯原始碼]

使用 Matlab,可以透過使用邏輯索引從陣列中提取子陣列。考慮以下結構體陣列

   foo = struct('field_a',{1,2,3,4},'field_b',{4,8,12,16})

要從 foo 中獲取一個子陣列,其中所有 foo.field_a 值都等於 2,可以使用布林陣列執行邏輯索引。因此,用於此目的的返回布林陣列的布林測試將是

   [foo.field_a] == 2

因此,透過使用此布林陣列執行邏輯索引,Matlab 定義了一個結構體陣列,其元素由來自 foo 的那些元素組成,這些元素的 field_a 值等於 2,方法是

   foo([foo.field_a] == 2)
華夏公益教科書