Main Content

Arreglos de estructuras

Cuando tenga datos que quiera organizar por nombre, puede utilizar estructuras para almacenarlos. Las estructuras almacenan datos en contenedores llamados campos, a los que se puede acceder por los nombres que se especifiquen. Utilice la notación de puntos para crear, asignar y acceder a los datos de los campos de las estructuras. Si el valor almacenado en un campo es un arreglo, se puede utilizar la indexación de arreglos para acceder a sus elementos. Cuando se almacenan varias estructuras como un arreglo de estructuras, se puede utilizar la indexación de arreglos y la notación de puntos para acceder a cada una de las estructuras y a sus campos.

Crear una estructura escalar

En primer lugar, cree una estructura llamada patient con campos que almacenen datos sobre un paciente. El diagrama muestra cómo la estructura almacena los datos. Una estructura como patient también se denomina estructura escalar, porque la variable almacena una estructura.

strucdem_01.png

Utilice la notación de puntos para agregar los campos name, billing y test y asigne datos a cada uno de los campos. En este ejemplo, la sintaxis patient.name crea tanto la estructura como su primer campo. Los comandos siguientes agregan más campos.

patient.name = 'John Doe';
patient.billing = 127;
patient.test = [79 75 73; 180 178 177.5; 220 210 205]
patient = struct with fields:
       name: 'John Doe'
    billing: 127
       test: [3x3 double]

Acceder a los valores de los campos

Después de crear un campo, puede seguir utilizando la notación de puntos para acceder al valor que almacena y modificarlo.

Por ejemplo, modifique el valor del campo billing.

patient.billing = 512.00
patient = struct with fields:
       name: 'John Doe'
    billing: 512
       test: [3x3 double]

Con la notación de puntos, también puede acceder al valor de cualquier campo. Por ejemplo, cree una gráfica de barras de los valores de patient.test. Agregue un título con el texto de patient.name. Si un campo almacena un arreglo, esta sintaxis devuelve el arreglo completo.

bar(patient.test)
title("Test Results for " + patient.name)

Figure contains an axes object. The axes object with title Test Results for John Doe contains 3 objects of type bar.

Para acceder a parte de un arreglo almacenado en un campo, agregue índices correspondientes al tamaño y tipo del arreglo. Por ejemplo, cree una gráfica de barras de los datos en una columna de patient.test.

bar(patient.test(:,1))

Figure contains an axes object. The axes object contains an object of type bar.

Indexar en un arreglo de estructuras no escalar

Los arreglos de estructuras pueden ser no escalares. Puede crear un arreglo de estructuras de cualquier tamaño, siempre que cada estructura del arreglo tenga los mismos campos.

Por ejemplo, agregue una segunda estructura en patients con datos sobre un segundo paciente. Asimismo, asigne el valor original de 127 en el campo billing de la primera estructura. Como el arreglo tiene ahora dos estructuras, debe acceder a la primera estructura mediante indexado, como en patient(1).billing = 127.

patient(2).name = 'Ann Lane';
patient(2).billing = 28.50;
patient(2).test = [68 70 68; 118 118 119; 172 170 169];
patient(1).billing = 127
patient=1×2 struct array with fields:
    name
    billing
    test

Como resultado, patient es un arreglo de estructuras de 1 por 2 con el contenido que se muestra en el diagrama.

strucdem_02.png

Cada registro de paciente del arreglo es una estructura de clase struct. En ocasiones, un arreglo de estructuras se conoce como arreglo struct. No obstante, los términos arreglo struct y arreglo de estructuras significan lo mismo. Al igual que otros arreglos de MATLAB®, un arreglo de estructuras puede tener cualquier dimensión.

Un arreglo de estructuras tiene las siguientes propiedades:

  • Todas las estructuras del arreglo tienen el mismo número de campos.

  • Todas las estructuras tienen los mismos nombres de campo.

  • Los campos con el mismo nombre en diferentes estructuras pueden contener diferentes tipos o tamaños de datos.

Si se agrega una nueva estructura al arreglo sin especificar todos sus campos, los campos no especificados contendrán arreglos vacíos.

patient(3).name = 'New Name';
patient(3)
ans = struct with fields:
       name: 'New Name'
    billing: []
       test: []

Para indexar en un arreglo de estructuras, utilice la indexación de arreglos. Por ejemplo, patient(2) devuelve la segunda estructura.

patient(2)
ans = struct with fields:
       name: 'Ann Lane'
    billing: 28.5000
       test: [3x3 double]

Para acceder a un campo, utilice la indexación de arreglos y la notación de puntos. Por ejemplo, devuelva el valor del campo billing del segundo paciente.

patient(2).billing
ans = 28.5000

También se puede indexar en un arreglo almacenado mediante un campo. Cree una gráfica de barras que muestre solo las dos primeras columnas de patient(2).test.

bar(patient(2).test(:,[1 2]))

Figure contains an axes object. The axes object contains 2 objects of type bar.

Nota

Solo se puede indexar en una parte de un campo cuando se hace referencia a un único elemento de un arreglo de estructuras. MATLAB® no admite instrucciones como patient(1:2).test(1:2,2:3), que intentan indexar en un campo en varios elementos del arreglo de estructuras. En su lugar, utilice la función arrayfun.

Consulte también

| |

Temas relacionados