Contenuto principale

Array di strutture

Quando si dispone di dati che si desidera organizzare per nome, è possibile utilizzare delle strutture per memorizzarli. Le strutture memorizzano i dati in contenitori chiamati campi, ai quali è poi possibile accedere tramite i nomi specificati. Utilizzare la notazione a punto per creare, assegnare e accedere ai dati nei campi della struttura. Se il valore memorizzato in un campo è un array, è possibile utilizzare l'indicizzazione dell'array per accedere ai suoi elementi. Quando si memorizzano più strutture come array di strutture, è possibile utilizzare l'indicizzazione dell'array e la notazione a punto per accedere alle singole strutture e ai loro campi.

Creazione di una struttura scalare

Per prima cosa, creare una struttura denominata patient che contenga campi in cui memorizzare i dati relativi a un paziente. Il diagramma mostra come la struttura memorizza i dati. Una struttura come patient è detta anche struttura scalare in quanto la variabile memorizza una sola struttura.

strucdem_01.png

Utilizzare la notazione a punto per aggiungere i campi name, billing e test, assegnando i dati a ciascun campo. In questo esempio, la sintassi patient.name crea sia la struttura che il suo primo campo. I comandi che seguono aggiungono altri campi.

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: [3×3 double]

Accesso ai valori nei campi

Dopo aver creato un campo, è possibile continuare ad utilizzare la notazione a punto per accedere e modificare il valore che il campo memorizza.

Ad esempio, modificare il valore del campo billing.

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

Con la notazione a punto, è inoltre possibile accedere al valore di qualsiasi campo. Ad esempio, creare un grafico a barre dei valori in patient.test. Aggiungere un titolo con il testo in patient.name. Se un campo memorizza un array, questa sintassi restituisce l'intero array.

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.

Per accedere a una parte di un array memorizzato in un campo, aggiungere indici adeguati alle dimensioni e al tipo dell'array. Ad esempio, creare un grafico a barre dei dati in una colonna di patient.test.

bar(patient.test(:,1))

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

Indicizzazione a un array di strutture non scalare

Gli array di strutture possono essere non scalari. È possibile creare un array di strutture di qualsiasi dimensione, purché ogni struttura nell'array abbia gli stessi campi.

Ad esempio, aggiungere una seconda struttura a patients contenente i dati relativi a un secondo paziente. Inoltre, assegnare il valore originale di 127 al campo billing della prima struttura. Dato che l'array ora ha due strutture, è necessario accedere alla prima struttura tramite indicizzazione, come in 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

Come risultato, patient è un array di strutture 1x2 con i contenuti mostrati nel diagramma.

strucdem_02.png

Ogni record paziente nell'array è una struttura di classe struct. Un array di strutture viene talvolta denominato array di struct. Comunque, i termini array di struct e array di strutture significano la stessa cosa. Come altri array di MATLAB®, un array di strutture può avere qualsiasi dimensione.

Un array di strutture presenta le seguenti proprietà:

  • Tutte le strutture nell'array hanno lo stesso numero di campi.

  • Tutte le strutture hanno gli stessi nomi di campo.

  • Campi con lo stesso nome in strutture diverse possono contenere dati di tipi o dimensioni differenti.

Se si aggiunge una nuova struttura all'array senza specificarne tutti i campi, i campi non specificati conterranno array vuoti.

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

Per indicizzare a un array di strutture, utilizzare l'indicizzazione dell'array. Ad esempio, patient(2) restituisce la seconda struttura.

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

Per accedere a un campo, utilizzare l'indicizzazione dell'array e la notazione a punto. Ad esempio, restituire il valore del campo billing per il secondo paziente.

patient(2).billing
ans = 
28.5000

È inoltre possibile indicizzare a un array memorizzato tramite un campo. Creare un grafico a barre che mostri solo le prime due colonne di patient(2).test.

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

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

Nota

È possibile indicizzare a una parte di un campo solo quando si fa riferimento a un singolo elemento di un array di strutture. MATLAB® non supporta dichiarazioni come patient(1:2).test(1:2,2:3), che tentano di indicizzare a un campo per più elementi dell'array di strutture. Utilizzare invece la funzione arrayfun.

Vedi anche

| |

Argomenti