Hauptinhalt

Struktur-Arrays

Wenn Sie Daten haben, die Sie nach Namen ordnen möchten, können Sie Strukturen verwenden, um sie zu speichern. Strukturen speichern Daten in Behältern, die Felder genannt werden, auf die Sie dann über die von Ihnen angegebenen Namen zugreifen können. Verwenden Sie die Punktnotation, um Daten in Strukturfeldern zu erstellen, zuzuweisen und darauf zuzugreifen. Wenn der in einem Feld gespeicherte Wert ein Array ist, können Sie die Array-Indizierung verwenden, um auf Elemente des Arrays zuzugreifen. Wenn Sie mehrere Strukturen als Struktur-Array speichern, können Sie die Array-Indizierung und die Punktnotation verwenden, um auf einzelne Strukturen und deren Felder zuzugreifen.

Erstellen einer skalaren Struktur

Erstellen Sie zunächst eine Struktur namens patient, in deren Feldern Daten über einen Patienten gespeichert werden. Das Diagramm veranschaulicht, wie die Struktur Daten speichert. Eine Struktur wie patient wird auch als skalare Struktur bezeichnet, weil die Variable eine einzige Struktur speichert.

strucdem_01.png

Verwenden Sie die Punktnotation, um die Felder name, billing und test hinzuzufügen, wobei Sie jedem Feld Daten zuweisen. In diesem Beispiel erstellt die Syntax patient.name sowohl die Struktur als auch ihr erstes Feld. Die folgenden Befehle fügen weitere Felder hinzu.

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]

Zugreifen auf Werte in Feldern

Nachdem Sie ein Feld erstellt haben, können Sie weiterhin die Punktnotation verwenden, um auf den darin gespeicherten Wert zuzugreifen und ihn zu ändern.

Ändern Sie zum Beispiel den Wert des Feldes billing.

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

Mit der Punktnotation können Sie auch auf den Wert eines beliebigen Feldes zugreifen. Erstellen Sie zum Beispiel ein Balkendiagramm mit den Werten in patient.test. Fügen Sie in patient.name einen Titel mit dem Text hinzu. Wenn ein Feld ein Array speichert, dann gibt diese Syntax das gesamte Array zurück.

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.

Um auf einen Teil eines in einem Feld gespeicherten Arrays zuzugreifen, fügen Sie Indizes hinzu, die für die Größe und den Typ des Arrays geeignet sind. Erstellen Sie zum Beispiel ein Balkendiagramm für die Daten in einer Spalte von patient.test.

bar(patient.test(:,1))

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

In nicht-skalare Struktur-Arrays indizieren

Struktur-Arrays können auch nicht-skalar sein. Sie können ein Struktur-Array beliebiger Größe erstellen, solange jede Struktur im Array dieselben Felder besitzt.

Fügen Sie zum Beispiel in patients eine zweite Struktur mit Daten über einen zweiten Patienten hinzu. Weisen Sie außerdem den ursprünglichen Wert von 127 dem billing-Feld der ersten Struktur zu. Da das Array nun zwei Strukturen besitzt, müssen Sie auf die erste Struktur durch Indizierung zugreifen: 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

Daraus folgt, dass patient ein 1×2-Struktur-Array mit dem im Diagramm gezeigten Inhalt ist.

strucdem_02.png

Jeder Patientendatensatz im Array ist eine Struktur der Klasse struct. Ein Array von Strukturen wird manchmal auch als „struct array“ bezeichnet. Die Begriffe „struct array“ und „structure array“ bedeuten jedoch dasselbe. Wie andere MATLAB®-Arrays kann auch ein Struktur-Array beliebige Dimensionen haben.

Ein Struktur-Array besitzt die folgenden Eigenschaften:

  • Alle Strukturen im Array haben die gleiche Anzahl von Feldern.

  • Alle Strukturen haben die gleichen Feldnamen.

  • Felder mit demselben Namen in verschiedenen Strukturen können unterschiedliche Datentypen oder -größen enthalten.

Wenn Sie dem Array eine neue Struktur hinzufügen, ohne alle Felder anzugeben, dann enthalten die nicht angegebenen Felder leere Arrays.

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

Verwenden Sie die Array-Indizierung, um in ein Struktur-Array zu indizieren. Zum Beispiel gibt patient(2) die zweite Struktur zurück.

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

Verwenden Sie die Array-Indizierung und die Punktnotation, um auf ein Feld zuzugreifen. Geben Sie zum Beispiel den Wert des Feldes billing für den zweiten Patienten zurück.

patient(2).billing
ans = 
28.5000

Sie können auch in ein durch ein Feld gespeichertes Array indizieren. Erstellen Sie ein Balkendiagramm, das nur die ersten beiden Spalten von patient(2).test anzeigt.

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

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

Hinweis

Sie können in einen Teil eines Feldes nur dann indizieren, wenn Sie sich auf ein einzelnes Element eines Struktur-Arrays beziehen. MATLAB® unterstützt keine Anweisungen wie z. B. patient(1:2).test(1:2,2:3), die versuchen, in ein Feld für mehrere Elemente des Struktur-Arrays zu indizieren. Verwenden Sie stattdessen die arrayfun-Funktion.

Siehe auch

| |

Themen