cmd sort [ Perl] - Perl - Programmation
Marsh Posté le 14-04-2003 à 22:29:37
salut
si je me souviens ya une fonction qui s'appel exec() ou un truc du style, regarde dans la doc
Marsh Posté le 15-04-2003 à 08:14:17
vfqs a écrit : Slt all! |
A ma connaissance, ce n'est pas possible de faire ca directement avec le sort. Donc il faut d'abord rendre les elements uniques puis les trier.
Voila un bout de code qui fait ca.
Code :
|
Marsh Posté le 15-04-2003 à 11:24:14
SteF_DOBERMANN: Merci pour l'infos, mais après test exec est similaire à system.
phoenix35: En gros c un peu comme une boucle "for" ton bout de code ?
En tout cas ca fonctionne. Est ce plus rapide qu'une boucle for ?
Marsh Posté le 15-04-2003 à 11:45:38
vfqs a écrit : SteF_DOBERMANN: Merci pour l'infos, mais après test exec est similaire à system. |
J'avoue le map fait un peu comme une boucle for
mais en beaucoup plus rapide.
Marsh Posté le 15-04-2003 à 12:10:35
phoenix35 a écrit : |
Effectivement, c plus rapide j'ai gagné 20% de temps de traiement. un grand merci
Marsh Posté le 15-04-2003 à 13:50:08
à noter ausi que sort ne trie pas en ordre alphanumérique, il est un peu bizarre!!
Marsh Posté le 15-04-2003 à 14:04:30
arghbis a écrit : à noter ausi que sort ne trie pas en ordre alphanumérique, il est un peu bizarre!! |
Ah ? Pourtant d'apres la doc (perldoc -f sort), quand on ne donne pas de fonction ou block de tri, il utilise la comaparison standard des chaines ?
A part en cas d'utilisation de "use locale;" ou la je suppose qu'il se debrouille avec les lettres accentuees, mais j'ai la flemme d'aller lire la doc. Qui a le courage ? Moi je digere...
Marsh Posté le 15-04-2003 à 14:08:06
ben écoute, d'après mon expérience, il trie comme ça :
- en entrée : 1, 2, 3, 4, 10, 100, 1000
- en sortie : 1, 10, 100, 1000, 2, 3, 4
sinon, faut que tu fasses une fonctions tri :
sub tri {
$a<=>$b;
}
ou $b<=>$a pour du décroissant
et tu l'utilise comme ça par exemple :
foreach my $a (sort tri(keys(%hash))) {
...
}
voilà
Marsh Posté le 16-04-2003 à 08:23:24
arghbis a écrit : ben écoute, d'après mon expérience, il trie comme ça : |
Ben ca c'est normal comme resultat de tri pour du tri alphanumerique ! Dans alphanumerique, i, ya d'abord alpha. Lorsqu'on compare 2 chaines, dix > Douze > 9 > 2000 > 10
Sinon pour ton exemple de tri, n'utilises pas de fonction mais un block si tu veux que ca aille plus vite (d'apres la doc de sort):
Code :
|
Marsh Posté le 16-04-2003 à 11:24:15
ben autant pour moi, mais qd je veux trier ces nombres, de manière naive je m'attends à ce qu'ils soient dans l'ordre voulu! donc, je disais ça au cas où ... le coup de ton bloc, c bien mais bon si tu utilise 50 fois le tri, ça fait bcp de répétitions
Marsh Posté le 16-04-2003 à 11:36:07
arghbis a écrit : ben autant pour moi, mais qd je veux trier ces nombres, de manière naive je m'attends à ce qu'ils soient dans l'ordre voulu! donc, je disais ça au cas où ... le coup de ton bloc, c bien mais bon si tu utilise 50 fois le tri, ça fait bcp de répétitions |
Je suis pas expert en Byte-code perl, mais a mon avis, le block une fois compile ne doit pas prendre trop de place.
Mais si ca t'embette trop, dans ce cas tu fais ta fonction au niveau au-dessus:
Code :
|
si tes tableaux ne sont pas trop gros ! sinon tu dois commencer a utiliser des references a l'appel et pour le resultat et ca devient lourd.
C'est pour ca, je prefere mettre le block a chaque fois avec un appel direct a sort.
Mais ce n'est qu'un avis tres personnel.
Marsh Posté le 14-04-2003 à 19:38:29
Slt all!
Est-il possible à la cmd sort de perl de s'éxécuter comme "sort -u" sous shell Unix ?
Ou une cmd similaire. mais pas de boucle, car trop long. ni de cmd system.
Merci d'avance pour vos réponses.