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 3No 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 3Si 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 9Para obtener información relacionada, consulte: