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

Langage Delphi Discussion :

Comparer les proprietés d'objets


Sujet :

Langage Delphi

  1. #1
    Membre émérite Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 625
    Points : 2 479
    Points
    2 479
    Par défaut Comparer les proprietés d'objets
    Salut à tous,

    je suis en train de faire un programme dans lequel je dois comparer les propriétés d'objets. Je m'explique :

    J'ai une liste d'objet qui contient n instances du meme objet. Dans cet objet j'ai 10 propriétés ; ce qui m'interesse, c'est de comparer les 4 premières propriétés. Si dans deux instances, j'ai ces 4 propriétés identiques alors j’arrête le traitement.

    Je pourrais faire des boucles for imbriqués, mais n'y a t-il pas moyen de faire mieux que cela ? Merci pour vos idées.

    PS: je bosse avec la version xe3 de delphi.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 871
    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 871
    Points : 11 361
    Points
    11 361
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Quels sont les types de propriétés en question ?
    Plutôt que des for, une récursion ?
    Construire un arbre ?

  3. #3
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Si tu utilises un TObjectList tu peux détourner la fonction de tri de son usage normal. Il suffit de lui passer un TComparer qui gère ta comparaison et dans le cas où il y a égalité tu sors avec une exception maison que tu interceptes autour de l'appel à sort.

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Cpt Anderson Voir le message
    Salut à tous,

    je suis en train de faire un programme dans lequel je dois comparer les propriétés d'objets. Je m'explique :

    J'ai une liste d'objet qui contient n instances du meme objet. Dans cet objet j'ai 10 propriétés ; ce qui m'interesse, c'est de comparer les 4 premières propriétés. Si dans deux instances, j'ai ces 4 propriétés identiques alors j’arrête le traitement.

    Je pourrais faire des boucles for imbriqués, mais n'y a t-il pas moyen de faire mieux que cela ? Merci pour vos idées.

    PS: je bosse avec la version xe3 de delphi.
    je ne comprend pas bien la question...quel est le but recherché ? écrire une fonction générique CompareProperties(Obj1, Obj2, NbProps) ? Pouvoir faire évoluer la fonction ? ne pas écrire de code ?

    à priori je partirais sur une méthode (ou un class helper au besoin)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    type
      TMonObject = class
        ...
        function Match4(Obj: TMonObject): Boolean;
      end;
     
    function TMonObject.Match4(Obj: TMonObject): Boolean;
    begin
      Result := (Obj.Prop1 = Prop1) and (Obj.Prop2 = Prop2) and (Obj.Prop3 = Prop3) and (Obj.Prop4 = Prop4);
    end;
    on peut aussi imaginer utiliser les RTTI mais est-ce bien nécessaire ?

  5. #5
    Membre émérite Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 625
    Points : 2 479
    Points
    2 479
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Bonjour,
    Quels sont les types de propriétés en question ?
    Plutôt que des for, une récursion ?
    Construire un arbre ?
    je n'ai que des string. Un arbre oui, j'y ai pensé, un tableau...

  6. #6
    Membre émérite Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 625
    Points : 2 479
    Points
    2 479
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    je ne comprend pas bien la question...quel est le but recherché ? écrire une fonction générique CompareProperties(Obj1, Obj2, NbProps) ? Pouvoir faire évoluer la fonction ? ne pas écrire de code ?

    à priori je partirais sur une méthode (ou un class helper au besoin)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    type
      TMonObject = class
        ...
        function Match4(Obj: TMonObject): Boolean;
      end;
     
    function TMonObject.Match4(Obj: TMonObject): Boolean;
    begin
      Result := (Obj.Prop1 = Prop1) and (Obj.Prop2 = Prop2) and (Obj.Prop3 = Prop3) and (Obj.Prop4 = Prop4);
    end;
    on peut aussi imaginer utiliser les RTTI mais est-ce bien nécessaire ?
    Bonjour Paul,

    désolé si je n'ai pas été clair...

    Le but est de voir si dans mes n intenses d'objets, j'en ai deux qui ont les mêmes valeurs pour les 4 premières propriétés (qui sont toutes de type string).

    Pas besoin forcement d'une fonction générique, ce type de cas, je ne le rencontrerai plus je pense.

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    et bien tu n'as pas d'autre solution que de faire une boucle...de la liste sur elle même ou vers une autre liste

    sans avoir testé, quelque chose de cet ordre

    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
     
      P := List.Length - 1;
      repeat
        N := P;
        for I := N - 1 downto 0 do
        begin
           if List[I].Match4(List[N]) then
           begin
             List.Delete(N); // supprimer le premier
             N := I; // utiliser le second pour les prochaines comparaisons
             Dec(P); // la liste a été réduite
           end;
        end;
        Dec(P); // au suivant 
       until P = 0; // on a tout testé

  8. #8
    Membre émérite Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 625
    Points : 2 479
    Points
    2 479
    Par défaut
    Merci pour vos réponses, on va boucler...

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

Discussions similaires

  1. comparer les valeurs de 2 objets de même type
    Par laurent12345 dans le forum C#
    Réponses: 4
    Dernier message: 19/03/2012, 15h48
  2. [Débutant] Pourquoi un "plot" modifie les proprietes de l'objet Axes
    Par Bktero dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 01/07/2009, 14h22
  3. Trouver toutes les proprietes ou methode d'un objet
    Par superfly dans le forum Framework .NET
    Réponses: 17
    Dernier message: 27/09/2007, 11h28
  4. Réponses: 6
    Dernier message: 24/08/2006, 12h17
  5. [Collections][HashMap]Comparer les objets de la hashmap
    Par rvfranck dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 16/12/2005, 21h29

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