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 :

Utilisation de la fonction sort


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut Utilisation de la fonction sort
    Bonjour à tous,


    J'aimerais un peu d'aide afin de réussir à trier mon array, selon la valeur numérique de S, puis celle de A :

    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
     
    my @sample_name = qw /FP014SC_A12_S7
    FP014SC_A12_S5
    FP014SC_A1_S5
    FP014SC_A15_S5
    FP014SC_A16_S6
    FP014SC_A2_S6/;
     
     
    # d'abord, tous les S1 (de A1 à A16), puis les S2 (de A1 à A16)  ...
     
    @sample_name = map {  sort {$a<=>$b} $_[1]} map {  sort {$a<=>$b} $_[2]} map {split ('_', $_)} @sample_name;
     
    print join("\t", @sample_name), "\n";
    D'avance merci,

  2. #2
    Membre chevronné Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Par défaut
    Vite fait (je suis à la bourre...) :
    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
    Taisha:~/perl/forum $ perl -E '
    my @sample_name = qw /FP014SC_A12_S7
     FP014SC_A12_S5
     FP014SC_A1_S5
     FP014SC_A15_S5
     FP014SC_A16_S6
     FP014SC_A2_S6/;
    my @sorted = map { join "", @$_ }
                 sort { $a->[3] <=> $b->[3] or $a->[1] <=> $b->[1] }
                 map {
                   my @decomposition = m/^(.*_A)(\d+)(_S)(\d+)$/
                     or die "erreur de format: \047$_\047";
                   [ @decomposition ]
                 } @sample_name;
    say for @sorted'
    FP014SC_A1_S5
    FP014SC_A12_S5
    FP014SC_A15_S5
    FP014SC_A2_S6
    FP014SC_A16_S6
    FP014SC_A12_S7
    Taisha:~/perl/forum $
    Si tu as des questions n'hésite pas.

  3. #3
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Ah c'est vraiment super ! Merci beaucoup, surtout que tu étais à la bourre.
    Il y a juste cette partie que je ne comprends pas : [ @decomposition ] ... mais, les explications peuvent attendre quelques jours ... ça fonctionne, et je peux continuer mon code.
    Encore merci pour ton aide.

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Permet de créer un tableau (array) anonyme contenant @decomposition (la décomposition du texte en clés de tri).
    Chaque élément retourné par map sera donc une référence à un tableau et dans la routine de tri, $a->[3] fera référence au 4e élément décomposé d'une ligne, et $a->[1] au 2e élément décomposé.
    Le map du début du pipeline va reconstruire les lignes d'origine après avoir été triées en procédant par join "", @$_

    Cette opération de tri utilise la technique de la transformée Schwartzienne

  5. #5
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    J'ai compris le traitement des données, mais il va falloir que je m'entraine avant de réussir seule.
    Merci beaucoup pour ces explications et ce lien.

  6. #6
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Je revoyais le code, pour essayer de bien m'ancrer son fonctionnement dans la tête ... puis, je me suis demandée, pourquoi utiliser un 'or' dans le map du tri ?

  7. #7
    Membre chevronné Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Cette opération de tri utilise la technique de la transformée Schwartzienne
    Disons plutôt un map/sort/map. La 'transformée Schwarzienne' canonique dans ce cas aurait me semble-t-il été
    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
    Taisha:~/perl/forum $ perl -E '
    my @sample_name = qw /FP014SC_A12_S7
     FP014SC_A12_S5
     FP014SC_A1_S5
     FP014SC_A15_S5
     FP014SC_A16_S6
     FP014SC_A2_S6/;
    my @sorted = map $_->[0] =>
                 sort { $a->[1] <=> $b->[1] or $a->[2] <=> $b->[2] }
                 map { [ $_, reverse m/^.*_A(\d+)_S(\d+)$/ ] }
                 @sample_name;
    say for @sorted'
    FP014SC_A1_S5
    FP014SC_A12_S5
    FP014SC_A15_S5
    FP014SC_A2_S6
    FP014SC_A16_S6
    FP014SC_A12_S7
    Taisha:~/perl/forum $

  8. #8
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Et bien et bien, que de lecture pour ce matin, et ainsi bien démarrer la journée. Merci à tous pour ces explications très claires. Pour une fois, j'ai dix fois plus de commentaires que de code .
    Je n'ai pas encore regardé le lien 'A Fresh Look at Efficient Perl Sorting', mais je compte le faire. Le tri, c'est vraiment un sujet très intéressant, là j'utilise les tutoriels de ce forum 'Programmation fonctionnelle en Perl' de Laurent Rosenfeld, mais je n'ai pas encore tout compris . Je suis contente ce matin, je viens de découvrir le 'ctrl scroll', qui me permet de soulager mes yeux

    C'est grâce à des personnes comme vous que ce forum est si agréable.

    Bonne journée à tous.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/05/2009, 18h35
  2. Réponses: 3
    Dernier message: 19/11/2007, 19h36
  3. [STL] Débutant : problème utilisation fonction Sort
    Par marcootz dans le forum SL & STL
    Réponses: 5
    Dernier message: 29/08/2007, 20h19
  4. Utilisation de la fonction qsort
    Par Jsmeline dans le forum C
    Réponses: 8
    Dernier message: 28/01/2005, 12h40
  5. [LG]librairies : utiliser seulement quelques fonctions
    Par wwwroom dans le forum Langage
    Réponses: 13
    Dernier message: 14/05/2004, 22h50

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