Rechercher : dans
Par :

[PERL ]Tri d'un tableau 2D

Dernière réponse le 11 aoû 2008 à 22:46:16 sorbidot, le 11 aoû 2008 à 16:28:49 
 Signaler ce message aux modérateurs

Bonjour,

J'ai un tableau Perl de deux dimensions (100 ligne * 25 colonne). Je voudrai trier mon tableau en fonction de la colonne 10.

je vous remercie d'avance pour votre aide.

Configuration: Windows XP
Firefox 3.0.1

Meilleures réponses pour « [PERL ]Tri d'un tableau 2D » dans :
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
Inverser les éléments d'un tableau -Récursivité- VoirVoici une procédure récursive qui permet d’inverser les éléments d’une partie d’un tableau compris entre la position p et n : Procedure Inverser (Var t : Tab; p, n : Integer); Var aux : Real; Begin If p < n Then ...
Tri par fusion - récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par fusion : Procedure Tri_Fusion (Var t : TAB; g, d : integer); Var m, i, j, k : integer; s : TAB; Begin If d > g Then ...
Perl - Les fonctions VoirLa notion de fonction et de procédure On appelle procédure un sous-programme qui permet d'effectuer un ensemble d'instruction par simple appel de la procédure dans le corps du programme principal. Les procédure permettent d'exécuter dans plusieurs...
Les tableaux en langage C++ VoirType de données complexes Les variables, telles que nous les avons vues, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de nombreuses données, comme cela est souvent le cas, des variables distinctes seraient beaucoup trop lourdes...
Les variables avec Perl VoirConcept de variable avec Perl Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Perl peuvent être de trois...

1

bendf82, le 11 aoû 2008 à 18:14:46
Répondre à bendf82

2

lami20j, le 11 aoû 2008 à 22:09:20

Salut,

il suffit de trier selon le champ concerné (si nombre utilise <=> , si chaine de caractère utilise cmp )

voici une exemple

#!/usr/bin/perl
#
use warnings;use strict;

my @tab = (
           ["lami20j","x",1000,1000,"lami20j,,,","/home/lami20j","/bin/bash"],
           ["mysql","x",104,112,"MySQL Server,,,","/var/lib/mysql","/bin/false"],
           ["yann","x",1001,1001,"","/home/yann","/bin/bash"],
           ["sshd","x",108,65534,"","/var/run/sshd","/usr/sbin/nologin"],
           ["smmta","x",109,113,"Mail Transfer Agent,,,","/var/lib/sendmail","/bin/false"],
           ["smmsp","x",110,114,"Mail Submission Program,,,","/var/lib/sendmail","/bin/false"],
           ["bind","x",111,115,"","/var/cache/bind","/bin/false"],
           ["postfix","x",112,117,"","/var/spool/postfix","/bin/false"],
           ["papa","x",1002,10001,"","/home/papa","/bin/bash"],
           ["maman","x",1003,10001,"","/home/maman","/bin/bash"],
           ["ftp","x",113,65534,"","/home/ftp","/bin/false"],
           ["uml-net","x",114,119,"","/home/uml-net","/bin/false"],
           ["saned","x",115,120,"","/home/saned","/bin/false"],
           ["c","x",1004,1004,"","/home/c","/bin/sh"],
           ["cristi","x",1005,1005,"","/home/cristi","/bin/bash"],
           ["invite","x",1006,1006,"","/home/invite","/bin/bash"],
           ["clamav","x",116,121,"","/var/lib/clamav","/bin/false"],
          );

my @tri = sort { $a->[2] <=> $b->[2] } @tab; # tri selon le champ 3
print "@$_\n" for @tri;
__END__
Ce qui est intéressant c'est la possibilité de faire un tri sur un champ calculable
Tu peux aussi utiliser plusieurs critères en cas d'égalité. Par exemple si le champ 3 est le même tu peux trier selon un autre champ
106485010510997108

Répondre à lami20j

3

lami20j, le 11 aoû 2008 à 22:12:46

Et le résultat

lami20j@debian:~/trash$ perl ccm.pl
mysql x 104 112 MySQL Server,,, /var/lib/mysql /bin/false
sshd x 108 65534  /var/run/sshd /usr/sbin/nologin
smmta x 109 113 Mail Transfer Agent,,, /var/lib/sendmail /bin/false
smmsp x 110 114 Mail Submission Program,,, /var/lib/sendmail /bin/false
bind x 111 115  /var/cache/bind /bin/false
postfix x 112 117  /var/spool/postfix /bin/false
ftp x 113 65534  /home/ftp /bin/false
uml-net x 114 119  /home/uml-net /bin/false
saned x 115 120  /home/saned /bin/false
clamav x 116 121  /var/lib/clamav /bin/false
lami20j x 1000 1000 lami20j,,, /home/lami20j /bin/bash
yann x 1001 1001  /home/yann /bin/bash
papa x 1002 10001  /home/papa /bin/bash
maman x 1003 10001  /home/maman /bin/bash
c x 1004 1004  /home/c /bin/sh
cristi x 1005 1005  /home/cristi /bin/bash
invite x 1006 1006  /home/invite /bin/bash
106485010510997108

Répondre à lami20j

4

 sorbidot, le 11 aoû 2008 à 22:46:16

Je vous remercie pour vos réponse.

l'instruction suivante :
my @tri = sort { $a->[2] <=> $b->[2] } @tab;

marche torp bien.

Répondre à sorbidot