Main Content

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: