Contenu principal

struct

Description

Un tableau de structures est un type de données qui regroupe des données associées dans des conteneurs de données appelés champs. Chaque champ peut contenir n’importe quel type de données. Accédez aux données d’un champ avec une notation pointée de la forme structName.fieldName.

Création

Lorsque vous avez des données à intégrer dans une nouvelle structure, créez la structure en utilisant la notation pointée pour nommer ses champs un par un :

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

Les noms de champs peuvent contenir des lettres ASCII (A-Z, a-z), des chiffres (0-9) et des underscores. Ils doivent commencer par une lettre. La longueur maximale d’un nom de champ est namelengthmax.

Vous pouvez également créer un tableau de structures avec la fonction struct décrite ci-dessous. Vous pouvez spécifier de nombreux champs à la fois ou créer un tableau de structures non scalaire.

Description

s = struct crée une structure scalaire (1 x 1) ne contenant aucun champ.

s = struct(field,value) crée un tableau de structures avec le champ et la valeur spécifiés. L’argument en entrée value peut contenir n’importe quel type de données, par exemple numérique, logique, caractère ou cell array.

  • Si value n’est pas un cell array ou si value est un cell array scalaire, s est une structure scalaire. Par exemple, s = struct('a',[1 2 3]) crée une structure de 1 x 1 où s.a = [1 2 3].

  • Si value est un cell array non scalaire, s est un tableau de structures de mêmes dimensions que value. Chaque élément de s contient l’élément correspondant de value. Par exemple, s = struct('x',{'a','b'}) renvoie s(1).x = 'a' et s(2).x = 'b'.

  • Si value est un cell array vide {}, s est une structure vide (0 x 0).

exemple

s = struct(field1,value1,...,fieldN,valueN) crée un tableau de structures avec plusieurs champs.

  • Si aucune des entrées de value n’est un cell array ou si toutes les entrées de value qui sont des cell arrays sont scalaires, s est une structure scalaire.

  • Si l’une des entrées de value est un cell array non scalaire, s a les mêmes dimensions que ce cell array. Par ailleurs, si plusieurs entrées de value sont des cell arrays non scalaires, elles doivent toutes avoir les mêmes dimensions.

    Pour toute entrée de value qui est un cell array scalaire ou un tableau de tout autre type de données, struct insère le contenu de value dans le champ approprié pour tous les éléments de s. Par exemple, s = struct('x',{'a','b'},'y','c') renvoie s(1).x = 'a', s(2).x = 'b', s(1).y = 'c' et s(2).y = 'c'.

  • Si une entrée de value est un cell array vide {}, la sortie s est une structure vide (0 x 0). Pour spécifier un champ vide et conserver les valeurs des autres champs, utilisez plutôt [] en tant qu’entrée de value.

exemple

s = struct([]) crée une structure vide (0 x 0) ne contenant aucun champ.

s = struct(obj) crée une structure scalaire contenant des noms de champs et des valeurs qui correspondent aux propriétés de obj. La fonction struct ne convertit pas, obj mais crée plutôt s en tant que nouvelle structure. Cette structure ne conserve pas les informations relatives aux classes. Par conséquent, les propriétés privées, protégées et masquées deviennent des champs publics dans s. La fonction struct génère un avertissement lorsque vous utilisez cette syntaxe.

Arguments en entrée

développer tout

Nom du champ, spécifié sous forme de vecteur de caractères ou de string scalar.

Valeurs, spécifiées sous forme de tableau de n’importe quel type. Si une entrée de value est un cell array non scalaire, toutes les entrées qui sont des cell arrays non scalaires doivent avoir les mêmes dimensions.

Si une entrée de value est un cell array vide {}, la sortie est un tableau de structures vide. Pour spécifier un seul champ vide, utilisez [].

La fonction struct copie les propriétés de obj dans les champs d’une nouvelle structure scalaire.

La fonction struct ne crée pas de structure à partir de la plupart des types de données fondamentaux. Par exemple, si obj a le type de données double ou char, struct génère un message d’erreur. Toutefois, struct renvoie bien les propriétés d’une table ou d’une timetable sous forme de structure. Pour la liste des types de données fondamentaux, consultez Fundamental MATLAB Classes.

Exemples

réduire tout

Stockez des données associées dans les champs d’une structure. Vous pouvez attribuer aux champs des noms lisibles par l’humain qui décrivent les données.

Créez une structure en lui ajoutant des champs avec la notation pointée. Les champs contiennent les valeurs x et y d’une onde sinusoïdale ainsi que du texte décrivant les données.

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 … ] (1×100 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 … ] (1×100 double)
    title: 'y = sin(x)'

Tracez l’onde sinusoïdale. Vous pouvez faire référence aux tableaux de valeurs x et y par leurs noms de champs. Ajoutez ensuite le titre.

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.

Créez une structure non scalaire contenant un seul champ.

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

Affichez le contenu de chaque élément.

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

Lorsque vous accédez à un champ d’une structure non scalaire, par exemple s.f, MATLAB® renvoie une liste d’éléments séparés par des virgules. Dans ce cas, s.f est équivalent à s(1).f, s(2).f, s(3).f.

Créez une structure non scalaire contenant plusieurs champs.

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

Les cell arrays pour value2 et value3 sont de dimension 1 x 2, donc s est aussi de dimension 1 x 2. Comme value1 est un tableau numérique et non un cell array, s(1).f1 et s(2).f1 ont un contenu identique. De même, comme le cell array pour value4 contient un seul élément, s(1).f4 et s(2).f4 ont un contenu identique.

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'

Créez une structure contenant un champ vide. Utilisez [] pour spécifier la valeur du champ vide.

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

Créez une structure avec un champ contenant un cell array.

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

Créez une structure vide contenant plusieurs champs.

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

  0×0 empty struct array with fields:

    a
    b
    c

Affectez une valeur à un champ dans une structure vide.

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

Créez une structure imbriquée où a est une structure avec un champ contenant une autre structure.

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

Affichez les noms des champs de a.b.

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

Capacités étendues

développer tout

Historique des versions

Introduit avant R2006a

développer tout