Date: Jan 18, 2013 5:14 PM
Author: Steven Lord
Subject: Re: using getfield() with a stuct array



"Bruce Elliott" <bruce.elliott@jhuapl.nospam.edu> wrote in message
news:kdc3h7$d6b$1@newscl01ah.mathworks.com...
> Is there any way to use getfield() on an array of structure and to get a
> same-sized array of field values?
>
> In other words, I can do this:
>
> x = [myArr.F];
>
> to get an array with the values in the field F in my stuct array, myArr.
>
> This, however, does not work:
>
> x = getfield(myArr,'F');
>
> (Putting [] around anything on the right-hand-side does not help.)
>
> There's probably a good reason for this, but the documentation suggests
> that x = getfield(S,'F') is equivalent to x = S.F, so I would have hoped
> that I could do this.


For _scalar_ struct arrays S, yes those are equivalent.

http://www.mathworks.com/help/matlab/ref/getfield.html

"value = getfield(struct, 'field'), where struct is a 1-by-1 structure,
returns the contents of the specified field, equivalent to value =
struct.field."
and
"If structure struct or any of the fields is a nonscalar structure, and you
do not specify an Indx, the getfield function returns the values associated
with the first index."

Try:

thefieldname = 'F';
x = [myArr.(thefieldname)]

You can use this like:

F = struct('x', {2, 5, 17})
z = F(mod([F.('x')], 2) == 1)

This will extract the elements of F whose x fields contain odd values. From
the way I constructed F you would expect z to contain two elements, and it
does.

--
Steve Lord
slord@mathworks.com
To contact Technical Support use the Contact Us link on
http://www.mathworks.com