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 :

une fonction pour enlever les doublons d'un array


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 17
    Points
    17
    Par défaut une fonction pour enlever les doublons d'un array
    bonjour j'ai un souci dont je n'arrive pas a me defaire. J'ai créé une proocédure pour enlever tous les doublons d'un tableau :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    procedure TArray.Unique();
    var
      TempTab : Array of Variant;
      TempCurrentPos : integer;
      Pos, Count : integer;
      Ajout : Boolean;
    begin
      if(CurrentLength>1) then
      begin
        SetLength(TempTab, CurrentLength);
        TempCurrentPos := 0;
        for Pos := 0 to CurrentLength - 1 do
        begin
          Ajout := true;
          for Count := 0 to TempCurrentPos - 1 do
          begin
            ShowMessage(ShowBasicVariantType(TempTab[Count]) + ' - ' + ShowBasicVariantType(Tableau[Pos]));
            if TempTab[Count] = Tableau[Pos] then Ajout := false;
          end;
          if (Ajout) then
          begin
            TempTab[TempCurrentPos] := Tableau[Pos];
            inc(TempCurrentPos);
          end;
        end;
        DelAllElement();
        for Count := 0 to TempCurrentPos - 1 do
          AddElement(TempTab[Count]);
      end ;
    end;
    mais je me retrouve avec une erreur d'exception me disant violation d'acces.
    les deux elements de comparaison son tous deux de type varDispatch.

    Une petite idée ?

    CurrentLength est la longueur du tableau fournie lors de l'instanciation de mon composant TArray.
    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
    18
    19
    20
    21
     
    TArray = class(TObject)
        constructor Create;
        procedure   SetIncrement(Increment : Integer);
        function    AddElement(Element : Variant) : Boolean; overload;
        function    AddElement(Element : Variant; Index : Integer) : Boolean; overload;
        function    DelElement(Index : Integer) : Boolean;
        function    DelAllElement() : Boolean;
        function    GetElement(Index : Integer) : Variant;
        function    Length() : Integer;
        procedure   Unique();
        function   ShowBasicVariantType(varVar: Variant) : string;
      private
        Tableau : Array of Variant;
        CurrentLength : Integer;
        MaxLength : Integer;
        CurrentIncrement : Integer;
     
      public
     
      end;
    donc si vous avez une idée...

    ca plante sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if TempTab[Count] = Tableau[Pos] then Ajout := false;

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par secteur_52
    ca plante sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if TempTab[Count] = Tableau[Pos] then Ajout := false;
    As-tu vérifié avec des breakpoints si TempTab et Tableau avaient la bonne taille? Et si Count et/ou Pos ne dépassait pas l'index maximal?

    Pour éviter ce genre de problème, utilise High:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for Pos := 0 to High(Tableau) do

Discussions similaires

  1. fonction pour enlever les doublons
    Par da_latifa dans le forum Haskell
    Réponses: 6
    Dernier message: 04/12/2013, 17h11
  2. Réponses: 3
    Dernier message: 30/09/2008, 09h42
  3. Réponses: 5
    Dernier message: 29/04/2008, 15h30
  4. Réponses: 6
    Dernier message: 21/04/2008, 19h49
  5. Réponses: 5
    Dernier message: 13/11/2007, 23h00

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