FAQ MATLABConsultez toutes les FAQ

Nombre d'auteurs : 11, nombre de questions : 168, dernière mise à jour : 2 septembre 2018 

 
OuvrirSommaireStructures

Une structure est un tableau multidimensionnel dont l'accès aux éléments s'effectue par l'utilisation de noms de champs.

Ce type de variable convient parfaitement aux données référencées (base de données, carnet d'adresses…).

Comme les tableaux de cellules, les structures peuvent contenir tous les types de variables (matrice, chaîne de caractère, tableau de cellules, structures etc.).

L'initialisation d'une structure s'effectue directement ou à l'aide de la fonction structDocumentation de la fonction struct.

 
Sélectionnez
S.nom = 'Caro-Line';
S.age = 33;
S.fonction = 'Modératrice MATLAB';

Le code précédent crée une structure S dont les trois champs sont « nom », « age » et « fonction ».

Une structure est un type de variable multidimensionnelle :

 
Sélectionnez
S(1,1).nom = 'Caro-Line';
S(1,1).age = 33;
S(1,1).fonction = 'Modératrice MATLAB';

S(2,1).nom = 'Dut';
S(2,1).age = 30;
S(2,1).fonction = 'Responsable MATLAB';

S(3,1).nom = 'tug83';
S(3,1).age = 27;
S(3,1).fonction = 'Modérateur MATLAB';

S(4,1).nom = 'rostomus';
S(4,1).age = 24;
S(4,1).fonction = 'Modérateur MATLAB';

Le code précédent crée un tableau de structures S de dimension 3x1.

Ce même tableau de structures S peut être directement créé de cette façon :

 
Sélectionnez
S = struct('nom',{'Caro-Line' ; 'Dut' ; 'tug83' ; 'rostomus'}, ...
           'age',{33 ; 30 ; 27 ; 24}, ...
           'fonction',{'Modératrice MATLAB' ; 'Responsable MATLAB' ; 'Modérateur MATLAB' ; 'Modérateur MATLAB' })
Mis à jour le 27 septembre 2012  par Jérôme Briot

Lien : Structures :: Classes (Data Types) (MATLAB®)

L'accès s'effectue en mentionnant le nom du champ désiré comme ceci :

 
Sélectionnez
S = struct('nom',{'Caro-Line' ; 'Dut' ; 'tug83' ; 'rostomus'}, ...
           'age',{33 ; 30 ; 27 ; 24}, ...
           'fonction',{'Modératrice MATLAB' ; 'Responsable MATLAB' ; 'Modérateur MATLAB' ; 'Modérateur MATLAB' });
         
>> S(1,1).nom

ans =

Caro-Line

>> S(3,1).fonction

ans =

Modérateur MATLAB
Créé le 27 mai 2007  par Jérôme Briot

L'accès aux éléments à l'intérieur d'une structure s'effectue en utilisant soit (), soit {}, soit ., en fonction du type de l'élément.

 
Sélectionnez
S(1,1).data = {[1 2 ; 3 4] 'raw'};
S(1,1).range = [1:50];
S(1,1).operateur.nom = 'moi';
S(1,2).data = {ones(5) 'filter'};
S(1,2).range = [51:100];
S(1,2).operateur.nom = 'toi';

>> S(1,1).data{1}

ans =

     1     2
     3     4
     
>> S(1,1).data{1}(2,1)

ans =

     3

>> S(1,2).data{2}

ans =

filter

>> S(1,2).range(1:10)

ans =

    51    52    53    54    55    56    57    58    59    60
    
>> S(1,2).operateur.nom

ans =

toi
Créé le 27 mai 2007  par Jérôme Briot

Les champs dynamiques de structure sont disponibles depuis la version 6.5 de MATLAB. Ils se substituent (presque) aux fonctions getfieldDocumentation de la fonction getfield et setfieldDocumentation de la fonction setfield (ou eval). Ils offrent une syntaxe plus naturelle à l'indexage des structures par leurs champs dont le nom peut être variable.

À la place de :

 
Sélectionnez
>> maStructure = struct();
>> champ = 'nomDynamique';
>> maStructure = setfield(maStructure, champ, 42)
 
maStructure = 
 
    nomDynamique: 42
 
>> valeur = getfield(maStructure, champ)
 
valeur =
 
    42

on a :

 
Sélectionnez
>> maStructure = struct();
>> champ = 'nomDynamique';
>> maStructure.(champ) = 42
 
maStructure = 
 
    nomDynamique: 42
 
>> valeur = maStructure.(champ)
 
valeur =
 
    42

Cette notation permet entre autres :

  • de supprimer le coût d'appel aux fonctions setfield et getfield ;
  • d'éviter deux copies de la structure dues au passage en paramètre et retour.

On notera que l'usage des fonctions getfield et setfield reste néanmoins nécessaire pour des manipulations complexes. Par exemple, un nombre de descendants inconnu :

 
Sélectionnez
>> champs = {'un', 'deux', 'trois'};
>> maStructure = struct();
>> maStructure  = setfield(maStructure, {5}, champs{:} , 3);
% équivalent à
% maStructure(5).(champs{1}).(champs{2}).(champs{3}) = 3
>> maStructure.un.deux.trois

ans = 

    trois: 3

>> champs{end+1} = 'quatre';
>> maStructure = struct();
>> maStructure  = setfield(maStructure, {5}, champs{:} , 4);
% équivalent à
% maStructure(5).(champs{1}).(champs{2}).(champs{3}).(champs{4}) = 4
>> maStructure.un.deux.trois.quatre

ans = 

    quatre: 4

On pourra à tout moment obtenir la liste des champs d'un niveau de la structure avec la fonction fieldnamesDocumentation de la fonction fieldnames.

Créé le 13 août 2014  par Jérôme Marsaguet

Lien : Use Dynamic Field References

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2007-2017 Developpez LLC Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.