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 Perl Discussion :

supression des doublons


Sujet :

Langage Perl

  1. #1
    Membre du Club Avatar de pymouse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 137
    Points : 67
    Points
    67
    Par défaut supression des doublons
    Bonjour,

    N'étant sur le perl que depuis 2jours, je suis loin d'être un expert. Mon preblème et le suivant. J'ai un tableau de référence (tableau de tableau), ces réf font référence a un tableau qui seras tout le temps le même, comme le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my @tab_elt;
    my @elt
     
    while()
    {
    my @elt = ($1,$2)
    $tab_elt[i]=\@elt;
    i++;
    }
    Mon problème est que je peut avoir des @elt égaux...Mais comme dans @tab_elt ce sont des références..., je ne vois pas comment éviter les doublons? Il n'existe pas de fonction pour le faire? Suis-je obligé de créer ma fonction qui compare l'element que je veut rajouter avec tous les autres avant de l'insérer dans le tableau?

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 578
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2003
    Messages : 1 578
    Points : 2 022
    Points
    2 022
    Par défaut
    Bonjour,

    plusieurs remarques sur le code que je vois :

    - il manque un ; après la déclaration de ton @elt, la 1ère déclaration devrais-je préciser.
    - pourquoi déclare-tu de nouveau une liste nommée @elt dans ta boucle while ?
    - de quelle expression régulière proviennent les variables de motif $1 et $2 ?
    - pourquoi ne pas nous montrer ton code intégralement ?

  3. #3
    Membre du Club Avatar de pymouse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 137
    Points : 67
    Points
    67
    Par défaut
    Mon code c'est juste a titre d'exemple!
    Je voi pas l'intéret de mettre mon code exact, ce que je cherche c'est la méthode pour supprimer ou évité des doublons dans mon tableau d'éléments.
    C'est pas vraiment un problème de syntaxe mais plutot de méthode...Enfin je pense.

    J'aime bien comprendre comment faire...

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Soit tu fais une boucle pour comparer à tous les éléments précédents, soit tu utilises un hash. Est-ce que l'ordre de ton tableau est important ?
    Supposons qu'il n'est pas important, dans ce cas pour te donner une idée :
    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
    my %elts;
     
    while(<$file>) {
      chomp();
      if( m/([^:]):(.*)/ ) {
        # l'important c'est que la clé soit _caractéristique_ de la valeur
        $elts{"$1\0$2"} = [ $1, $2 ];
      }
    }
     
    # pas indispensable, on peut continuer à se servir de values %elts
    # mais intéressant pour un gros programme qui doit éviter de gâcher de
    # l'espace
    my @tab_elts = values %elts;
    undef %elts
     
    foreach my $v ( @tab_elts ) {
      print "1 : $v->[0], 2 : $v->[1]\n";
    }
    Ici j'utilise \0 comme séparateur parce que je doute que le caractère nul soit présent dans $1 ou $2.

    Si l'ordre est important, il est nécessaire de maintenir en parallèle un tableau et un hash.

    --
    Jedaï

  5. #5
    Membre du Club Avatar de pymouse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 137
    Points : 67
    Points
    67
    Par défaut
    C'est exactement ce qui me faut.
    Je vais mettre ça en place.

    Merci

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

Discussions similaires

  1. supression des doublons d'un tableau trié
    Par takout dans le forum C
    Réponses: 3
    Dernier message: 27/05/2012, 14h55
  2. Réponses: 1
    Dernier message: 17/05/2011, 10h29
  3. supression des doublons selon différentes conditions ..
    Par gwems dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/03/2009, 21h18
  4. Supression des doublons les plus anciens
    Par jonkalak dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 30/05/2007, 08h42
  5. Réponses: 13
    Dernier message: 12/01/2006, 10h45

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