6.1.2 Structure Arrays

A structure array is a particular instance of a structure, where each of the fields of the structure is represented by a cell array. Each of these cell arrays has the same dimensions. Conceptually, a structure array can also be seen as an array of structures with identical fields. An example of the creation of a structure array is

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

which creates a 1-by-2 structure array with two fields. Another way to create a structure array is with the struct function (see Creating Structures). As previously, to print the value of the structure array, you can type its name:

x
     ⇒ x =
        {
          1x2 struct array containing the fields:

            a
            b
        }

Individual elements of the structure array can be returned by indexing the variable like x(1), which returns a structure with two fields:

x(1)
     ⇒ ans =
        {
          a = string1
          b =  1
        }

Furthermore, the structure array can return a comma separated list of field values (see Comma Separated Lists), if indexed by one of its own field names. For example:

x.a
     ⇒
        ans = string1
        ans = string2

Here is another example, using this comma separated list on the left-hand side of an assignment:

[x.a] = deal ("new string1", "new string2");
 x(1).a
     ⇒ ans = new string1
 x(2).a
     ⇒ ans = new string2

Just as for numerical arrays, it is possible to use vectors as indices (see Index Expressions):

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

The function size will return the size of the structure. For the example above

size (x)
     ⇒ ans =

          1   4

Elements can be deleted from a structure array in a similar manner to a numerical array, by assigning the elements to an empty matrix. For example

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

© 1996–2020 John W. Eaton
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://octave.org/doc/v6.3.0/Structure-Arrays.html