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

Modules Perl Discussion :

Trie d'un hash par rapport a un autre


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Par défaut Trie d'un hash par rapport a un autre
    Je cherche comment trier efficacement un hash par rapport a un autre le but est de supprimer les valeurs déjà présente du hash de référence du hash en cours

    J'ai ce ti script qui marche très bien mais je trouve qu'il fait beaucoup de boucles ce qui peut poser problème avec des hash de plusieur milliers voir million de valeurs .

    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
    #!/usr/bin/perl -w
     
     
    my %i = ( maison => ["aa"] );   # -> sql
    my %l = (maison => ["bb"], rien => ["gna","nananan"] );    # -> page
     
    my @tab = (keys %i);
    my @ref = (keys %l);
     
    for ($a = 0; $a <= $#tab; $a++) {
      for ($b = 0; $b <= $#ref; $b++) {
        if ( $tab[$a] =~ /$ref[$b]/gi ) {
          delete $ref[$b];
        }
      }
    }
     
     
     foreach my $key (@ref) {
       print "$l{$key}[0] et $l{$key}[1]\n";
    }

    Je cherche des optimisations si vous avez des idées je suis preneur

  2. #2
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut Re: Tris d'un hash par rapport a un autre
    Citation Envoyé par vodevil
    Je cherche des optimisations si vous avez des idées je suis preneur
    Comme ça, peut être ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/perl -w
     
    my %i = ( maison => ["aa"] );   # -> sql
    my %l = (maison => ["bb"], rien => ["gna","nananan"] );    # -> page
     
    @ref = grep { not exists ($i{$_}) } keys (%l);
     
    foreach my $key (@ref) {
       print "$l{$key}[0] et $l{$key}[1]\n";
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Par défaut
    Merci pr to aide mais ton script a un ti problème c'est que dans le mien j'utilise un regxp avec gi car les clefs non pas toute forcément la même casse

  4. #4
    Expert confirmé
    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
    Par défaut
    La Casse est-elle importante à conserver ?
    Si la réponse est non, je te conseille de réfléchir à passez toutes tes clés en minuscules, de préférence à la création.
    Si la réponse est oui, il vaut mieux essayer d'utiliser Regexp::Assemble par exemple. Ainsi l'opération sera en O(n) plutôt que O(n²).

    --
    Jedaï

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Par défaut
    mettre les mots en minuscule ne me pose pas de problème si par excemple sa ne détruit pas les caractères non latin par exemple un mot en sanskrit

  6. #6
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Il y a aussi la possibilité d'utiliser un attribut ou un Tie "NoCase" à la construction du hash dans lequel on supprime.

    C'est une éventualité pratique que j'ai trouvé dans un Linuxmag (N° 49, avril 2003), mais que je n'ai jamais eu l'occasion d'essayer.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Par défaut
    J'ai cherché, Attribute::nocase mais pas moyen de mettre la main dessus

Discussions similaires

  1. tri de hash par rapport aux valeurs
    Par paissad dans le forum Langage
    Réponses: 24
    Dernier message: 23/09/2021, 10h07
  2. Filter un hash par rapport a un autre
    Par mobscene dans le forum Langage
    Réponses: 5
    Dernier message: 14/10/2006, 20h00
  3. Trier un hash par rapport a un autre
    Par vodevil dans le forum Langage
    Réponses: 4
    Dernier message: 14/06/2006, 13h44
  4. [css] Positionnement d'une img par rapport a une autre img
    Par dark_vidor dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 26/02/2006, 00h07
  5. Afficher une fenetre par rapport a une autre
    Par luffy0013 dans le forum MFC
    Réponses: 4
    Dernier message: 14/02/2005, 21h16

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