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 :

trier un tableau en conservant l index


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut trier un tableau en conservant l index
    Bonjour

    je debute te viens de php ou il est possible de trier un tableau en conservant l index de ce dernier
    par exemple un tri ascendant sur un tableau T[1] = 200; T[2] = 600; T[18] = 300 T[15] = 1000 peut afficher a l issue du tri 1,18,2,15 si on utilise l index

    j ai cherché et posté ailleurs mais n ai pas trouvé s il existe une fonction comparable en delphi ?

    merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 670
    Points : 25 477
    Points
    25 477
    Par défaut
    Qu'appelles-tu l'index ???
    De plus tu semble utiliser une sorte de tableau associatif, avec 1,18,2,15 comme clé d'assoc ... il te faut en delphi, un tableau de record, ce record contenant l'assoc et la value ...

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 879
    Points : 11 376
    Points
    11 376
    Billets dans le blog
    6
    Par défaut
    tu dois pouvoir utiliser aussi un dérivé de TList, en implémentant la méthode Compare : tu ajoutes au TList le n° de Valeur et dans la méthode Compare, tu compares Valeur[TListItem], grosso-modo !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par ShaiLeTroll
    Qu'appelles-tu l'index ???
    De plus tu semble utiliser une sorte de tableau associatif, avec 1,18,2,15 comme clé d'assoc ... il te faut en delphi, un tableau de record, ce record contenant l'assoc et la value ...
    je pense que tu es dans le vrai mais je ne sais pas comment m y prendre en delphi.
    pourrais tu m indiquer un tuto ou qqchose qui me permette de decouvrir le tableua de record .
    je suppose qu il faut le declarer en array of record mais comment faire precisement pour que le tri s effectue sur la value ?

    je suis dsl c est peut etre le b.a.ba mais je ne sais pas ou chercher dans l aide delphi ....

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par tourlourou
    tu dois pouvoir utiliser aussi un dérivé de TList, en implémentant la méthode Compare : tu ajoutes au TList le n° de Valeur et dans la méthode Compare, tu compares Valeur[TListItem], grosso-modo !
    bon comme je debute je me refere sans cesse a l aide de delphi mais n ai pas trouvé la methode compare pourrais tu stp m en dire plus...merci

  6. #6
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    type
      TValue = record
        id : Integer;
        value : Integer;
      end;
     
    var tab : array[1..1000] of TValue;
     
    Tab[1].id := 1;
    Tab[1].value := 3000;
    [...]
    Par contre le tri (effectué sur le champs value) te deplacera les index de ton tableau :
    Si on a :
    Tab[1] = 3000;
    Tab[2] = 2000;
    On obtiendra suite au tri croissant :
    Tab[1] = 2000
    Tab[2] = 3000

    Mais un parcours de ton tableau en recherchant l'element d'ID 1 ou 2 te renverra la bonne valeur ! (3000 pour 1 et 2000 pour 2)

    En fait c'est ce qui se fait traditionellement mais dans de nombeux cas une astuce consiste faire correspondre d'id d'un element avec l'index du tableau pour eviter un champs de plus (et accessoirement un acces direct )

    Par contre des que l'on parle de tri, l'index se desolidarise du contenu du tableau donc ne peut plus etre utilise comme id ... qui rentre dans la partie "valeur" du tableau.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    bon comme je suis d un naturel penible...si si ce que je souhaite a l issue de mon tir c est pas recuperer les valeurs mais les index ordonnés suivant le tri ce que je comprends ne pas etre possible apres un tri.

    donc j imagine pouvoir ajouter un tableau Flag qui serait initialisé our toutes les valeurs a 0 et ensuite parcourir le tableau trié, comparé la valeur avec la 'valeur d'un id' et passer le flag pour cet id à 1
    puis faire ainsi sur toutes les valeurs triés ou le flag=0

    est ce, à ton avis, un bon procédé ?

    merci

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 670
    Points : 25 477
    Points
    25 477
    Par défaut
    Il faut séparer deux choses ... l'index mémoire du tableau et ton index "personnalisé"

    reprenons le TValue de Clorish

    en php tu as ceci
    T[1] = 200;
    T[2] = 600;
    T[18] = 300;
    T[15] = 1000;

    en delphi
    Tab[0].id := 1;
    Tab[0].value := 200;
    Tab[1].id := 2;
    Tab[1].value := 600
    Tab[2].id := 18;
    Tab[2].value := 300;
    Tab[3].id := 15;
    Tab[3].value := 1000;

    tu le tri
    Tab[0].id := 1;
    Tab[0].value := 200;
    Tab[1].id := 18;
    Tab[1].value := 300
    Tab[2].id := 2;
    Tab[2].value := 600;
    Tab[3].id := 15;
    Tab[3].value := 1000

    ... voilà tu as bien 1, 18, 2, 15, dans le champ ID, ... c'est évidemment plus compliqué en Delphi, la notion de tableau associatif n'existe pas ... il existe il me semble des classes qui permettent de le recréer, je personnellement fait une THashStringListqui pourrait faire l'affaire ... mais je ne l'ai JAMAIS trié autrement que sur la Clé de Hash (ID pour toi) ... et si mon code t'inspire, tu pourrait remplacer le tri sur le Hash par un tri sur la Valeur, ...ainsi tu aurais ta liste de tes index dans l'ordre via le HashCodes ...

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    merci j ai enfin compris

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trier un tableau et retrouver l'index initial
    Par neufrdb dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 14/03/2011, 10h25
  2. [Tableau][matrices]changement d'index et variables variables
    Par The Wretched dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 18/04/2005, 10h01
  3. Trier un tableau par ordre croissant
    Par Halleck dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 01/11/2004, 00h04
  4. [VB.NET] Quel objet tableau pour une recherche indexée ???
    Par Kitano dans le forum Windows Forms
    Réponses: 7
    Dernier message: 02/09/2004, 09h38
  5. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 16h51

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