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 :

Explication d'une fonction MAP


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 157
    Points : 80
    Points
    80
    Par défaut Explication d'une fonction MAP
    Bonjour

    J'ai un code que j'ai pas compris qui utilise la fonction map

    ce code il lit deux fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    my $kTestLines = 2000000;
    my $kMinSame   = 2;
    my $testA      = 'trans2';
    my $testB      = 'gh3-2.n';
     
    srand (1);
    buildTestFile($_) for $testA, $testB;
     
    open my $inA, '<', $testA or die "Can't open $testA: $!\n";
    open my $inB, '<', $testB or die "Can't open $testB: $!\n";

    par la suite on la fonction buldTestFile($_)
    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
    sub buildTestFile {
        my ($fName) = @_;
     
        open my $fOut, '>', $fName or die "Can't create '$fName': $!\n";
     
        for (1 .. $kTestLines) {
     
     
     
     
            my %words = map {$_ => undef} map {
                join '', map {randLetter()} 1 .. 4
            } 1 .. 4;
     
            print $fOut join (' ', keys %words), "\n";
        }
    }
     
     
    sub randLetter {
        return chr 65 + rand 26;
    }
    ce que j'ai pas compris c'est la partie du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     my %words = map {$_ => undef} map {
                join '', map {randLetter()} 1 .. 4
            } 1 .. 4;
     
            print $fOut join (' ', keys %words), "\n";
    S'il vous plait que contient exactement %words et que font les différentes fonction map

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    la fonction map prend en entrée une liste ou un tableau, applique à chaque élément de cette liste une transformation définie dans le bloc du map et renvoie la liste ainsi modifiée.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print map { $_ * 3, "\n" } 1..5;
    imprime:
    Une telle instruction se lit de droite à gauche (et de bas en haut quand il y a plusieurs lignes). Ici, elle prend en entrée les chiffres de 1 à 5. Le bloc du map traite successivement chacune de ces valeurs, la multiplie par 3 et renvoie cette valeur triplée et un retour à la ligne, tout cela étant ensuite affiché par le print.

    Dans ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     my %words = map {$_ => undef} map {
                join '', map {randLetter()} 1 .. 4
            } 1 .. 4;
    Les valeurs 1..4 utilisées à deux reprises ne sont pas utilisées à l'intérieur de leurs blocs respectifs, elles ne servent qu'à répéter l'opération 4 fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    join '', map {randLetter()} 1 .. 4
    génère un "mot" de quatre lettres aléatoires en majuscules.
    Pour chacun des mots de quatre lettres générés précédemment, ce map crée une paire clef => valeur, dans laquelle la clef est le mot de quatre lettre et la valeur est indéfinie. L'ensemble de ces opérations étant fait quatre fois (le 1..4 final), on se trouve au final avec un hachage de quatre entrées, dont les clefs sont les mots de quatre lettres et les valeurs non définies.

    Par exemple quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       'KHVR' => undef,
       'PGIG' => undef,
       'UUGQ' => undef,
       'YKYU' => undef,
    Tu trouveras plus d'information sur ce genre de construction dans ce tutoriel.

  3. #3
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    Merci beaucoup pour votre explication très pédagogique

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

Discussions similaires

  1. Explication d'une fonction
    Par koff12 dans le forum Débuter
    Réponses: 6
    Dernier message: 22/01/2016, 07h21
  2. [XL-2013] Explication sur une fonction de tri en VBA
    Par atk_49 dans le forum Excel
    Réponses: 4
    Dernier message: 07/07/2015, 13h44
  3. Explication d'une fonction
    Par isitien dans le forum jQuery
    Réponses: 4
    Dernier message: 08/02/2011, 18h06
  4. explication d'une fonction
    Par med_tijani dans le forum VB.NET
    Réponses: 1
    Dernier message: 28/08/2008, 14h19
  5. Explication d'une fonction
    Par akrogames dans le forum Général Python
    Réponses: 7
    Dernier message: 24/01/2008, 13h50

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