Acceder a elementos de un arreglo de estructuras no escalar
En este ejemplo se muestra cómo acceder a datos y procesar datos de varios elementos de un arreglo de estructuras no escalar:
Cree una estructura s
de 1 por 3 con el campo f
:
s(1).f = 1;
s(2).f = 'two';
s(3).f = 3 * ones(3);
Aunque cada estructura del arreglo debe tener el mismo número de campos y los mismos nombres de campo, el contenido de los campos puede ser de diferentes tipos y tamaños. Cuando hace referencia al campo f
en varios elementos del arreglo de estructuras, como
s(1:3).f
o
s.f
MATLAB® devuelve los datos de los elementos de una lista separada por comas, que se muestra de la siguiente manera:
ans = 1 ans = two ans = 3 3 3 3 3 3 3 3 3
No puede asignar la lista a una sola variable con la sintaxis v = s.f
, porque los campos pueden contener diferentes tipos de datos. Sin embargo, puede asignar los elementos de la lista al mismo número de variables, como
[v1, v2, v3] = s.f;
o asignarlos a elementos de un arreglo de celdas, como
c = {s.f};
Si todos los campos contienen el mismo tipo de datos y pueden formar un hiperrectángulo, puede concatenar los elementos de la lista. Por ejemplo, cree una estructura nums
con valores numéricos escalares en el campo f
y concatene los datos de los campos:
nums(1).f = 1; nums(2).f = 2; nums(3).f = 3; allNums = [nums.f]
Este código devuelve
allNums = 1 2 3
Si quiere procesar cada elemento de un arreglo con la misma operación, utilice la función arrayfun
. Por ejemplo, cuente el número de elementos del campo f
de cada estructura del arreglo s
:
numElements = arrayfun(@(x) numel(x.f), s)
La sintaxis @(x)
crea una función anónima. Este código llama a la función numel
de cada elemento del arreglo s
, como numel(s(1).f)
, y devuelve
numElements = 1 3 9
Para obtener información relacionada, consulte: