結構陣列(Structure Arrays)

結構陣列(structure arrays)是一種特別的資料結構,此結構的欄位是以巢狀陣列(cell arrays)表示,每一個巢狀陣列有相同的維度。結構陣列亦可視為資料結構所構成的陣列,而陣列中的資料結構所擁有的欄位皆相同。例如:

x(1).a = "string1";
x(2).a = "string2";
x(1).b = 1;
x(2).b = 2;

這樣會建立一個 21 的結構陣列,其包含兩個欄位。另一種建立結構陣列的方式是使用 struct() 函數(請參考建立結構)。若要顯示結構陣列中的資料,就像一般變數一樣輸入結構陣列的名稱即可:

x

輸出為

x =
{
  1x2 struct array containing the fields:

    a
    b
}

要存取結構陣列中的元素,可以使用索引的方式,例如:

x(1)

這樣會傳回兩個欄位的資料結構,輸出為

ans =
{
  a = string1
  b =  1
}

若直接指定結構陣列中的欄位,則會將此欄位的資料以逗點分隔序列(請參考逗點分隔序列)的格式傳回,例如:

x.a

輸出為

ans = string1
ans = string2

亦可使用逗點分隔序列的方式指定結構陣列中的資料:

[x.a] = deal("new string1", "new string2");

這會設定 x(1).ax(2).a 的資料:

x(1).a

輸出為

ans = new string1
x(2).a

輸出為

ans = new string2

結構陣列與一般數值陣列一樣可以使用向量作為為索引:

x(3:4) = x(1:2);
[x([1,3]).a] = deal("other string1", "other string2");
x.a

輸出為

ans = other string1
ans = new string2
ans = other string2
ans = new string2

size() 函數可以輸出資料結構的維度,例如:

size(x)

輸出為

ans =

   1   4

若要刪除結構陣列中的元素可以將其指定為空矩陣(empty matrix),此用法與一般數值陣列相同,例如:

in = struct ("call1", {x, Inf, "last"}, "call2", {x, Inf, "first"})

輸出為

in =
{
  1x3 struct array containing the fields:

    call1
    call2
}

將第一個元素刪除:

in(1) = [];
in.call1

輸出為

ans = Inf
ans = last
size(in)

輸出為

ans =

   1   2