DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Syntaxe WLangage / Déclaration des variables
  • Accès aux tableaux associatifs
  • Accès aux éléments des tableaux associatifs
  • Comment initialiser un tableau associatif dès sa déclaration?
  • Parcours des tableaux associatifs
  • Fonctions du WLangage et tableaux
  • Paramètres de type tableau associatif
  • Tableau associatif de classes ou de structures
  • Tableau associatif de tableau, file, pile, liste
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Tableau associatif (Type de variable)
En anglais : Associative array (Type of variable)
Un tableau associatif est un type "avancé" de tableau : il permet de regrouper une série d'éléments du même type. Chaque élément du tableau est indexé sur n'importe quel type d'information (et non plus simplement sur un indice numérique, comme dans les autres types de tableau).
Remarque : Ce type de tableau permet un accès rapide à un élément quelconque, avec certaines options sur les chaînes.
Exemple
// Remplit un tableau associatif avec les tailles de fichiers
taTailleFichier est tableau associatif d'entiers
taTailleFichier["Fichier1.txt"] = fTaille("Fichier1.txt")
taTailleFichier["Fichier2.txt"] = fTaille("Fichier2.txt")

// Récupère la taille d'un fichier
Trace(taTailleFichier["Fichier2.txt"])

// Parcourt les tailles des fichiers
sFichier est une chaîne
nTaille est un entier

// sFichier permet de récupérer la clé de parcours du tableau associatif
POUR TOUT Ã‰LÉMENT nTaille,sFichier DE taTailleFichier
Trace(ChaîneConstruit("%1 : %2", sFichier, nTaille)) 
FIN
Syntaxe

Déclarer un tableau associatif Masquer les détails

<Nom du tableau> est un tableau associatif [(<Options> [, <Valeur par défaut> [, <Type de clé> [,<Taille initiale>]]])] de <Type>
<Nom du tableau> :
Nom de la variable tableau à déclarer.
<Options> :
Combinaison de constantes permettant de paramétrer le fonctionnement du tableau :
AvecDoublonCette constante permet d'autoriser les doublons. En effet, par défaut, un tableau associatif ne peut pas contenir de doublons.
ccSansAccentSi le type de clé est une chaîne (par défaut), l'indexation ne tient pas compte des accents.
ccSansCasseSi le type de clé est une chaîne (par défaut), l'indexation ne tient pas compte de la casse.
ccSansEspaceSi le type de clé est une chaîne (par défaut), l'indexation ne tient pas compte des espaces.
ccSansPonctuationNiEspaceSi le type de clé est une chaîne (par défaut), l'indexation ne tient pas compte de la ponctuation et des espaces.
SansDoublon (valeur par défaut)Par défaut, un tableau associatif ne peut pas contenir de doublons.
Il est possible de ne pas indiquer cette constante.
La valeur "*" permet de conserver la valeur par défaut de l'option.
<Valeur par défaut> :
Valeur renvoyée lors de l'accès à un élément inexistant dans un tableau associatif sans doublon. Ce paramètre est ignoré dans un tableau associatif avec doublons. Par défaut, la valeur par défaut du type du tableau est utilisé (0, "", Faux).
La valeur "*" permet de conserver la valeur par défaut du type.
<Type de clé> :
Type de la clé utilisée pour parcourir le tableau. Par défaut, le parcours est réalisé sur une clé de type chaîne. Les types autorisés sont les suivants :
wlChaîneChaîne de caractères
wlChaîneUnicodeChaîne de caractères Unicode
wlDateDate
wlDateHeureDateHeure
wlEntierEntier signé sur 4 octets
wlEntier_8Entier signé sur 8 octets
wlEntierSansSigne_4Entier non signé sur 4 octets
wlEntierSansSigne_8Entier non signé sur 8 octets
wlHeureHeure
wlMonétaireMonétaire
wlNumériqueNumérique
wlRéelRéel sur 8 octets
La valeur "*" permet de conserver le type de clé par défaut (chaîne).
<Taille initiale> :
Entier. Correspond à la taille initiale de la zone mémoire pour le tableau associatif.
L'ajout peut être long dans un tableau associatif en cas de redimensionnement du tableau. En cas d'ajouts multiples, il est conseillé de surdimensionner le tableau pour optimiser les ajouts.
La valeur "*" permet de conserver la taille par défaut.
<Type> :
Type des éléments constituant le tableau.
WINDEVWindowsLinuxUniversal Windows 10 App Remarque : Les éléments constituant le tableau peuvent être également des tableaux, des tableaux fixes, des tableaux associatifs, des files, des piles ou des listes.

Déclarer un paramètre de type tableau associatif Masquer les détails

<Nom du paramètre> est un tableau associatif de <Type>
<Nom du paramètre> :
Nom de la variable tableau à déclarer.
<Type> :
Type des éléments constituant le tableau.
WINDEVWindowsLinuxUniversal Windows 10 App Remarque : Les éléments constituant le tableau peuvent être également des tableaux, des tableaux fixes, des tableaux associatifs, des files, des piles ou des listes.
Remarques

Accès aux tableaux associatifs

Pour manipuler un tableau associatif, il est possible d'utiliser les propriétés suivantes :
OccurrenceRenvoie le nombre d'occurrences dans le tableau.
VidePermet de savoir si le tableau est vide ou non.
Les syntaxes &Tableau et Tableau1 = Tableau2 sont interdites. La copie et la prise de référence sur les tableaux associatifs ne sont pas disponibles.

Accès aux éléments des tableaux associatifs

L'accès aux éléments des tableaux associatifs peut être différent si le tableau associatif est avec ou sans doublons.
Tableau associatif sans doublons
Propriété Existe
MonTableau[MaClé]..Existe

Renvoie Vrai si l'élément MaClé existe, Faux sinon.
Propriété Vide
MonTableau[MaClé]..Vide

Renvoie Vrai si l'élément MaClé n'existe pas, Faux sinon.
Propriété Occurrence
MonTableau[MaClé]..Occurrence

Renvoie 1 si l'élément MaClé existe, 0 si l'élément n'existe pas.
Affectation d'un élément
MonTableau[MaClé] = <Valeur>

Si l'élément MaClé n'existe pas, un élément MaClé est créé et affecté avec <Valeur>.
Si l'élément MaClé existe, sa valeur est modifiée.
MonTableau[MaClé, Indice] = Valeur

Si Indice est différent de 1, une erreur WLangage est affichée.
Si l'élément MaClé n'existe pas, une erreur WLangage est affichée.
Si l'élément MaClé existe, sa valeur est modifiée.

Syntaxe compatible avec tableaux associatifs avec doublons.
MonTableau[MaClé]++

Crée l'entrée dans le tableau associatif, avec la valeur par défaut spécifiée lors de la déclaration du tableau.
Accès à un élément
MonTableau[MaClé]

Si l'élément MaClé n'existe pas, renvoie la valeur par défaut du tableau.
Si l'élément MaClé existe, renvoie la valeur de l'élément.
MonTableau[MaClé, Indice]

Si Indice est différent de 1, une erreur WLangage est affichée.
Si l'élément MaClé n'existe pas, une erreur WLangage est affichée.
Si l'élément MaClé existe, renvoie la valeur de l'élément.

Syntaxe compatible avec tableaux associatifs avec doublons.
Adresse d'un élément
&MonTableau[MaClé]

Si l'élément MaClé n'existe pas, affichage d'une erreur WLangage.
Si l'élément MaClé existe, renvoie l'adresse de l'élément.
&MonTableau[MaClé, Indice]

Si Indice est différent de 1, une erreur WLangage est affichée.
Si l'élément MaClé n'existe pas, une erreur WLangage est affichée.
Si l'élément MaClé existe, renvoie l'adresse de l'élément.

Syntaxe compatible avec tableaux associatifs avec doublons.
Tableau associatif avec doublons
Propriété Existe
MonTableau[MaClé]..Existe

Renvoie Vrai si au moins un élément MaClé existe, Faux si l'élément MaClé n'existe pas.
Test de l'existence d'une clé : Propriété Vide
MonTableau[MaClé]..Vide

Renvoie Vrai si l'élément MaClé n'existe pas, Faux si au moins un élément MaClé existe.
Nombre d'éléments d'une clé : Propriété Occurrence
MonTableau[MaClé]..Occurrence

Renvoie le nombre d'éléments MaClé.
Affectation d'un élément
MonTableau[MaClé] = <Valeur>

Crée un élément MaClé, et affecte cet élément avec la valeur indiquée (même si des éléments MaClé existent déjà).
MonTableau[MaClé, Indice] = Valeur

Si Indice est supérieur au nombre d'éléments existants, une erreur WLangage est affichée.
Si l'élément MaClé n'existe pas, une erreur WLangage est affichée.
Si l'élément MaClé existe, la valeur de l'élément connu par son indice est modifiée.
Accès à un élément
MonTableau[MaClé]

Syntaxe interdite, provoquant une erreur WLangage (car il peut y avoir plusieurs éléments correspondant à la même clé).
MonTableau[MaClé, Indice]

Si Indice est supérieur au nombre d'éléments existants, une erreur WLangage est affichée.
Si l'élément MaClé n'existe pas, une erreur WLangage est affichée.
Si l'élément MaClé existe, renvoie la valeur de l'élément connu par son indice.
Adresse d'un élément
&MonTableau[MaClé]

Syntaxe interdite
&MonTableau[MaClé, Indice]

Si Indice est supérieur au nombre d'éléments existants, une erreur WLangage est affichée.
Si l'élément MaClé n'existe pas, une erreur WLangage est affichée.
Si l'élément MaClé existe, renvoie l'adresse de l'élément identifié par son indice.

Il est possible d'utiliser l'affectation multiple pour les tableaux associatifs.

Comment initialiser un tableau associatif dès sa déclaration?

Pour initialiser un tableau associatif dès sa déclaration, il suffit d'ajouter directement les couples "clé / valeur" en utilisant l'opérateur [ ] (crochet). La syntaxe est la suivante :
taMonTableau est un tableau associatif de xxx = ...
[ [<clé1>, <valeur1>], [<clé2>, <valeur2>], ... ]

Par exemple :
// Mémorise les taux de TVA par leur dénomination
taTauxTVA est un tableau associatif de réels = ...
[["Normale", 0.2], ["Intermédiaire", 0.1], ["Réduite", 0.055]]

Parcours des tableaux associatifs

Le parcours des différents éléments d'un tableau associatif peut être réalisé en utilisant la syntaxe POUR TOUT spécifique aux tableaux associatifs.

Fonctions du WLangage et tableaux

Plusieurs fonctions WLangage permettent de manipuler des tableaux associatifs. Pour plus de détails, consultez Fonctions de gestion des tableaux.
Il est ainsi par exemple possible de supprimer un élément d'un tableau associatif en utilisant la fonction Supprime (ou TableauSupprime) en utilisant la syntaxe suivante :
Supprime(NomTableau, clé)
TableauSupprime(NomTableau, Clé)

Paramètres de type tableau associatif

  • Le type des éléments du tableau associatif passé en paramètre doit être le même que celui de la déclaration.
  • Un tableau associatif ne peut pas être passé par valeur. Il faut obligatoirement passer une variable en paramètre.
    Exemple :
    // Ajoute un client dans le tableau
    PROCÉDURE AjouteClient(taClient est un tableau associatif de CClient,
    sNom est une chaîne,
    sInfo est une chaîne)
    // Construit le nouvel objet client
    c est CClient(sNom, sInfo)
    // Ajoute le nouvel objet dans le tableau
    taClient[sNom] = c
  • Aucune vérification n'est effectuée à la compilation : les vérifications sont uniquement effectuées en exécution.
  • La copie et la prise de référence sur les tableaux associatifs ne sont pas disponibles.

Tableau associatif de classes ou de structures

Si vous utilisez un tableau associatif de classes ou de structures, les différentes instances sont automatiquement recopiées lors des ajouts.
Si vous utilisez un tableau associatif de classes dynamiques ou de structures dynamiques, il est nécessaire d'allouer les classes ou les structures au moment de l'ajout (les libérations sont automatiquement réalisées).
Exemples :
// Cas d'un tableau d'objets NON dynamiques
// Objet
clObj est un cLMaClasse
// Tableau associatif d'objets
taAssociatif est un tableau associatif de cLMaClasse
// Affectation d'un des membres de l'objet
clObj:nMembre = 0
// Ajout dans le tableau associatif.
// C'est un tableau d'objets non dynamiques, l'objet est donc copié
// L'affectation peut être "longue" s'il y a beaucoup de membres
taAssociatif["Association"] = clObj
// Changement dans l'objet initial
clObj:nMembre = 2
// L'objet a été copié on retrouve donc 0 dans le tableau
// (valeur au moment de l'affectation)
Info(taAssociatif["Association"]:nMembre)
// Cas d'un tableau d'objets dynamiques
// Objet dynamique
pclObj est un cLMaClasse dynamique
// Tableau associatif d'objets dynamiques
taAssociatif est un tableau associatif de cLMaClasse dynamique
// Allocation d'un objet dynamique
pclObj = allouer un cLMaClasse
// Affectation d'un des membres de l'objet
pclObj:nMembre = 0
// Ajout dans le tableau associatif.
// C'est un tableau d'objets dynamiques.
// C'est donc un nouveau "pointeur" sur le même objet (affectation rapide)
taAssociatif["Association"] = pclObj
// Changement dans l'objet initial
pclObj:nMembre = 2
// Le tableau contient le même objet donc 2 dans le tableau aussi
Info(taAssociatif["Association"]:nMembre)
Les accès aux membres d'un élément inexistant d'un tableau associatif de structures ou de classes ne créent pas automatiquement l'instance de la structure ou de la classe.
La ligne de code :
MonTableauAssociatif["Clé"]:Membre = 5
échoue si l'élément "Clé" n'a pas été créé auparavant.
WINDEVWindowsLinuxUniversal Windows 10 App

Tableau associatif de tableau, file, pile, liste

Les syntaxes suivantes sont supportées :
<variable> est un tableau associatif de tableaux d'entiers
<variable> est un tableau associatif (avecDoublon) de tableaux d'entiers
<variable> est un tableau associatif (avecDoublon,wlEntier) de tableaux d'entiers
<variable> est un tableau associatif de tableaux de 5 entiers
<variable> est un tableau associatif (avecDoublon) de tableaux de 5 entiers
<variable> est un tableau associatif (avecDoublon,wlEntier) de tableaux de 5 entiers

<variable> est un tableau associatif de tableaux fixes de 5 entiers
<variable> est un tableau associatif (avecDoublon) de tableaux fixes de 5 entiers
<variable> est un tableau associatif (avecDoublon,wlEntier) de tableaux fixes de 5 entiers
<variable> est un tableau associatif de tableaux associatifs d'entiers
<variable> est un tableau associatif (avecDoublon) de tableaux associatifs d'entiers
<variable> est un tableau associatif (avecDoublon,wlEntier) de tableaux associatifs d'entiers

<variable> est un tableau associatif de tableaux associatifs (avecDoublon) d'entiers
<variable> est un tableau associatif (avecDoublon) de tableaux associatifs ...
(avecDoublon) d'entiers
<variable> est un tableau associatif (avecDoublon,wlEntier) de tableaux associatifs ...
(avecDoublon) d'entiers
<variable> est un tableau associatif de tableaux associatifs ...
(avecDoublon,wlEntier) d'entiers
<variable> est un tableau associatif (avecDoublon) de tableaux associatifs ...
(avecDoublon,wlEntier) d'entiers
<variable> est un tableau associatif (avecDoublon,wlEntier) de tableaux associatifs ...
(avecDoublon,wlEntier) d'entiers

<variable> est un tableau associatif de files d'entiers
<variable> est un tableau associatif (avecDoublon) de files d'entiers
<variable> est un tableau associatif (avecDoublon,wlEntier) de files d'entiers

<variable> est un tableau associatif de piles d'entiers
<variable> est un tableau associatif (avecDoublon) de piles d'entiers
<variable> est un tableau associatif (avecDoublon,wlEntier) de piles d'entiers

<variable> est un tableau associatif de listes d'entiers
<variable> est un tableau associatif (avecDoublon) de listes d'entiers
<variable> est un tableau associatif (avecDoublon,wlEntier) de listes d'entiers
Exemple : Tableau associatif de tableaux de chaînes :
// Déclaration
tabClasses est un tableau associatif de tableau <agrandissement> de chaînes
 
// Insère un élément dans le tableau associatif
Insère(tabClasses, "CM2")
 
// Remplissage des élèves CM2
tabClasses["CM2"][1] = "ALARD Serge"
tabClasses["CM2"][2] = "BERTAU Kelian"
 
// Insère un élément dans le tableau associatif
Insère(tabClasses, "CM1")
 
// Remplissage des élèves CM1
tabClasses["CM1"][1] = "ALONSO Benoit"
tabClasses["CM1"][2] = "CRISTO Benjamin"
 
POUR TOUT UneClasse, sNom de tabClasses
POUR TOUT Elève DE UneClasse
Trace(sNom + ":" + Elève)
FIN
FIN
Liste des exemples associés :
Les tableaux associatifs Exemples unitaires (WINDEV) : Les tableaux associatifs
[ + ] Utilisation des tableaux associatifs du WLangage :
- Remplir un tableau associatif
- Accéder à un tableau associatif
Version minimum requise
  • Version 11
Documentation également disponible pour…
Commentaires
Affectation d'une variable tableau associatif à une autre variable de même type
Syntaxe d'affectation fonctionnelle entre deux variables tableau associatif de même type.
Elle correspond à une affectation par copie : les données contenues préalablement dans le tableau associatif "cible" sont "écrasées".
A noter: l'affectation par référence est aussi fonctionnelle.

taACopier, taCible est un tableau associatif de chaîne

taACopier = [ ["Clé 1","Valeur 1"], ["Clé 2","Valeur 2"], ["Clé 3","Valeur 3"] ]
taCible = [ ["Clé unique", "Valeur unique"] ]

// Affectation par copie, les tableaux contiennent alors les mêmes données, mais sont distincts
// les opérateurs d'affectation = et <= ont le même effet
taCible = taACopier

// Les tableaux contiennent alors les mêmes données, mais sont distincts
// (des modifications ultérieures sur l'un des tableaux sont sans effet sur l'autre)

// Affectation par référence, les variables référencent alors le même tableau en mémoire.
// (les modifications portent sur les mêmes données)
taCible <- taACopier
=JBO=
12 nov. 2020
Autre syntaxe pour l'insertion
Une autre syntaxe est possible pour éviter l'utilisation préalable (et obligatoire !) de l'instruction Insère() lorsque le tableau associatif est un tableau de tableau de chaine :

//Déclaration
tabClasses est un tableau associatif de tableau <agrandissement> de chaines

//Remplissage
tabClasses["CM2"] = ["ALARD Serge","BERTAU Kelian"]
tabClasses["CM1"] = ["ALONSO Benoit","CRISTO Benjamin"]
Fabien
27 fév. 2018

Dernière modification : 10/01/2024

Signaler une erreur ou faire une suggestion | Aide en ligne locale