Main Content

struct

Beschreibung

Ein Strukturarray ist ein Datentyp, der miteinander in Beziehung stehende Daten mit Datencontainern, die Felder genannt werden, gruppiert. Jedes Feld kann jeden beliebigen Datentyp enthalten. Greifen Sie auf Daten in einem Feld zu, indem Sie die Punktnotation in der Form structName.fieldName verwenden.

Erstellung

Wenn Sie Daten in eine neue Struktur eingeben müssen, erstellen Sie die Struktur mithilfe der Punktnotation, um ihre Felder nacheinander zu benennen:

s.a = 1;
s.b = {'A','B','C'}
s = struct with fields:
    a: 1
    b: {'A'  'B'  'C'}

Feldnamen können ASCII-Buchstaben (A–Z, a–z), Ziffern (0–9) und Unterstriche enthalten und müssen mit einem Buchstaben beginnen. Die maximale Länge eines Feldnamens ist namelengthmax.

Sie können ein Strukturarray auch mithilfe der Funktion struct, die im Folgenden beschrieben ist, erstellen. Sie können viele Felder gleichzeitig angeben oder ein nichtskalares Strukturarray erstellen.

Beschreibung

s = struct erstellt eine Skalarstruktur (1x1) ohne Felder.

Beispiel

s = struct(field,value) erstellt ein Strukurarray mit dem angegebenen Feld und Wert. Das Eingabeargument value kann einen beliebigen Datentyp aufweisen, z. B. numerisch, logisch, Zeichen oder Zellenarray.

  • Wenn value kein Zellenarray ist oder wenn value ein skalares Zellenarray ist, dann ist s eine skalare Struktur. Beispielsweise erstellt s = struct('a',[1 2 3]) eine 1x1-Struktur, wobei s.a = [1 2 3].

  • Wenn value ein nichtskalares Zellenarray ist, dann ist s ein Strukturarray mit denselben Dimensionen wie value. Jedes Element von s enthält das entsprechende Element von value. Beispielsweise gibt s = struct('x',{'a','b'}) s(1).x = 'a' und s(2).x = 'b' zurück.

  • Wenn value ein leeres Zellenarray {} ist, dann ist s eine leere Struktur (0x0).

Beispiel

s = struct(field1,value1,...,fieldN,valueN) erstellt ein Strukturarray mit mehreren Feldern.

  • Wenn keine der value-Eingaben Zellenarrays sind oder wenn alle value-Eingaben, die Zellenarrays sind, Skalare sind, dann ist s eine skalare Struktur.

  • Wenn eine der value-Eingaben ein nichtskalares Zellenarray ist, dann hat s dieselben Dimensionen wie dieses Zellenarray. Wenn zwei oder mehr value-Eingaben nichtskalare Zellenarrays sind, dann müssen alle dieselben Dimensionen aufweisen.

    Für jeden Wert (value), der ein skalares Zellenarray oder ein Array eines anderen Datentyps ist, fügt struct die Inhalte von value in das relevante Feld für alle Elemente von s ein. Beispielsweise gibt s = struct('x',{'a','b'},'y','c') s(1).x = 'a', s(2).x = 'b', s(1).y = 'c' und s(2).y = 'c' zurück.

  • Wenn eine der value-Eingaben ein leeres Zellenarray ist, {}, dann ist die Ausgabe s eine leere Struktur (0x0). Wenn Sie ein leeres Feld angeben und die Werte anderer Felder beibehalten möchten, verwenden Sie stattdessen [] als value-Eingabe.

s = struct([]) erstellt eine leere Struktur (0x0) ohne Felder.

s = struct(obj) erstellt eine skalare Struktur mit Feldnamen und -werten, die den Eigenschaften von obj entsprechen. Die Funktion struct konvertiert obj nicht, sondern erstellt stattdessen s als neue Struktur. Diese Struktur behält die Klasseninformation nicht bei, sodass private, geschützte und verborgene Eigenschaften in s zu öffentlichen Feldern werden. Die Funktion struct gibt eine Warnung aus, wenn Sie diese Syntax verwenden.

Eingabeargumente

alle erweitern

Feldname, angegeben als Zeichenvektor oder Zeichenfolgenskalar.

Werte, angegeben als beliebiger Array-Typ. Wenn eine der value-Eingaben ein nichtskalares Zellenarray ist, dann müssen alle nichtskalaren Zellenarray-Eingaben dieselben Dimensionen aufweisen.

Wenn eine der value-Eingaben ein leeres Zellenarray ist, {}, dann ist die Ausgabe ein leeres Strukturarray. Zum Angeben eines einzelnen leeren Felds verwenden Sie [].

Die Funktion struct kopiert die Eigenschaften von obj in die Felder einer neuen Skalarstruktur.

Die Funktion struct erstellt aus den meisten der grundlegenden Datentypen keine Struktur. Wenn beispielsweise obj den Datentyp double oder char aufweist, gibt struct eine Fehlermeldung aus. Allerdings gibt struct die Eigenschaften einer Tabelle oder eines Timetable zurück. Eine Liste der grundlegenden Datentypen finden Sie unter Fundamental MATLAB Classes.

Beispiele

alle reduzieren

Speichern Sie in Beziehung stehende Datenelemente in den Feldern einer Struktur. Sie können den Feldern menschenlesbare Namen geben, die die Daten beschreiben.

Erstellen Sie eine Struktur, indem Sie dieser mithilfe der Punktnotation Felder hinzufügen. Die Felder enthalten x- und y-Werte für eine Sinuswelle sowie Text, der die Daten beschreibt.

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)
    title: 'y = sin(x)'

Plotten Sie die Sinuswelle. Sie können auf die Arrays der x- und y-Werte mithilfe ihrer Feldnamen verweisen. Fügen Sie anschließend den Titel hinzu.

plot(data.x,data.y)
title(data.title)

Figure contains an axes object. The axes object with title y = sin(x) contains an object of type line.

Erstellen Sie eine nichtskalare Struktur, die ein einzelnes Feld enthält.

field = 'f';
value = {'some text';
         [10, 20, 30];
         magic(5)};
s = struct(field,value)
s=3×1 struct array with fields:
    f

Zeigen Sie die Inhalte jedes Elements an.

s.f
ans = 
'some text'
ans = 1×3

    10    20    30

ans = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

Wenn Sie auf ein Feld einer nichtskalaren Struktur zugreifen, z. B. s.f, gibt MATLAB® eine durch Kommas getrennte Liste zurück. In diesem Fall ist s.f äquivalent zu s(1).f, s(2).f, s(3).f.

Erstellen Sie eine nichtskalare Struktur, die mehrere Felder enthält.

field1 = 'f1';  value1 = zeros(1,10);
field2 = 'f2';  value2 = {'a', 'b'};
field3 = 'f3';  value3 = {pi, pi.^2};
field4 = 'f4';  value4 = {'fourth'};

s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
s=1×2 struct array with fields:
    f1
    f2
    f3
    f4

Die Zellenarrays für value2 und value3 haben die Größe 1x2, weshalb auch s 1x2 ist. Da value1 ein numerisches Array und kein Zellenarray ist, haben s(1).f1 und s(2).f1 dieselben Inhalte. Analog dazu haben s(1).f4 und s(2).f4 dieselben Inhalte, da das Zellenarray für value4 über ein einzelnes Element verfügt.

s(1)
ans = struct with fields:
    f1: [0 0 0 0 0 0 0 0 0 0]
    f2: 'a'
    f3: 3.1416
    f4: 'fourth'

s(2)
ans = struct with fields:
    f1: [0 0 0 0 0 0 0 0 0 0]
    f2: 'b'
    f3: 9.8696
    f4: 'fourth'

Erstellen Sie eine Struktur, die ein leeres Feld enthält. Verwenden Sie [], um den Wert des leeren Felds anzugeben.

s = struct('f1','a','f2',[])
s = struct with fields:
    f1: 'a'
    f2: []

Erstellen Sie eine Struktur mit einem Feld, das ein Zellenarray enthält.

field = 'mycell';
value = {{'a','b','c'}};
s = struct(field,value)
s = struct with fields:
    mycell: {'a'  'b'  'c'}

Erstellen Sie eine leere Struktur, die mehrere Felder enthält.

s = struct('a',{},'b',{},'c',{})
s = 

  0x0 empty struct array with fields:

    a
    b
    c

Weisen Sie einem Feld in einer leeren Struktur einen Wert zu.

s(1).a = 'a'
s = struct with fields:
    a: 'a'
    b: []
    c: []

Erstellen Sie eine verschachtelte Struktur, wobei a eine Struktur mit einem Feld ist, das eine weitere Struktur enthält.

a.b = struct('c',{},'d',{})
a = struct with fields:
    b: [0x0 struct]

Zeigen Sie die Namen der Felder von a.b an.

fieldnames(a.b)
ans = 2x1 cell
    {'c'}
    {'d'}

Erweiterte Fähigkeiten

Versionsverlauf

Eingeführt vor R2006a

alle erweitern