IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Tableau 2 dimensions avec types différents ?


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut Tableau 2 dimensions avec types différents ?
    Bonjour,
    Je cherche à faire des tableaux à 2 dimensions mais avec des types différents pour chaque ligne du tableau (ligne 1 : integer, ligne 2 : string).
    En cherchant j'ai vu que ce n'était pas possible, un tableau à 2 dimensions doit avoir le même type dans la totalité du tableau.
    Est-ce qu'il existe un moyen de faire ce genre de choses sous Delphi ? Je voudrais faire une correspondance entre des integer et des string
    Merci !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Cela va dépendre si l'index de ligne de ton tableau à une influence ou pas (on passe alors d'un couple (id, string) à un triplet (index, id, string).

    La première solution c'est de faire un tableau de string en convertissant l'entier en string et vise-versa

    La deuxième solution c'est de passer par une structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      TData = record
        value : string[20];
        id  : Integer;
      end;
    avec éventuellement un booléen en plus pour savoir quel champs est effectif

    La troisième solution, c'est d’utiliser un tableau associatif comme TDictionary (désolé je ne connais pas bien Delphi et quelle bibliothèque tu utilises)

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Merci pour ta réponse
    Je me moque de l'ID du tableau je veux rechercher dans la première ligne la valeur d'un entier et en déduire la valeur d'un string qui est dans la 2ème ligne.
    C'est vrai que je n'ai pas pensé à la 2ème solution mais je peux sans doute créer un "array of TData" ensuite ?
    Et pour la 3ème solution ça correspond à une table de hashage ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Lis le wiki Tableau associatif

    Une table de hachage, oui et non.
    C'est l'idée d'avoir un tableau avec un couple (clé, valeur) et donc on va chercher la valeur avec la clé.
    Mais avec une table de hachage, la clé c'est une empreinte numérique (qui doit être unique, rapide à calculer, ...): donc non

    Toi il faut plus un TDictionary ou un conteneur comme cela


    Et pour la solution 2 tu as raison , tu passes à un tableau 1-D, mais niveau recherche, ajout, etc... c'est plus rapide d’utiliser un tableau associatif qui le fait à ta place.

    Sinon, tu as la base de donnée (avec une dépendance externe)

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Merci
    Je vais jeter un oeil sur le tableau associatif, ça me permettra de découvrir encore un nouveau type

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 658
    Points : 3 599
    Points
    3 599
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Citation Envoyé par NicCo Voir le message
    Merci pour ta réponse
    C'est vrai que je n'ai pas pensé à la 2ème solution mais je peux sans doute créer un "array of TData" ensuite ?
    Oui tu peux ensuite en faire un tableau, mais tu peux aussi passer par un TList. Avec le record indiqué par foetus, tu peux créer une liste de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    var
      maListe : TList<TData>;
      unRecord : TData;
    [...]
      // Instanciation de la liste
      maListe := TList<TData>.Create;
      // Alimentation d'un premier élément dans la liste
      unRecord.id := 123;
      unRecord.value := 'azerty';
      maListe.add(unRecord);
     
      // Alimentation d'un second élément dans la liste
      unRecord.id := 456;
      unRecord.value := 'qwerty';
      maListe.add(unRecord);
    [...]
    Il faut également ajouter Generics.Collections dans la clause uses. Tu disposes ainsi d'une liste d'objet de type TData et de toutes les fonctionnalités du TList (tri, recherche d'élément dans la liste, comparaison...).
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Merci également pour cette méthode, je suis en train de tester le TDictionary et après je testerai le TList mais les 2 semblent convenir parfaitement à mon usage

  8. #8
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Bonsoir,
    et pourquoi pas un tableau de variants ? Ty y mets ce que tu veux dedans. C'est un peu gourmand en ressources, mais çà marche bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    const 
       mot = 0;
       nbr = 1;
    MyTbl : array[0..1, 0..1000] of variant ;
    ...
    MyTbl[mot, 0] := 'Bonjour' ;
    MyTbl[nbr, 0] := 100;
    solilog

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/02/2016, 22h25
  2. allouer un tableau 2 dimensions avec shmget.
    Par youp_db dans le forum C
    Réponses: 3
    Dernier message: 12/06/2006, 11h11
  3. Réponses: 16
    Dernier message: 10/11/2005, 22h51
  4. Créer un tableau 2colonnes de 2 types différents ?
    Par lilou77 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 27/10/2005, 12h09
  5. Tableau d'objets de type différents
    Par Hell dans le forum C++
    Réponses: 9
    Dernier message: 11/01/2005, 22h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo