Comment faire pour trier les nombres en Perl?
print "@_\n";
4109 4121 6823 12967 12971 14003 20186
Comment puis-je trier en Perl?
À l'aide de @sorted = sort(@_);
me donne un ordre alphabétique
13041 13045 14003 20186 4109 4121 6823
Comment puis-je obtenir un numéro de commande? N'Perl ont intégré des fonctions de fusion de tri, d'insertion, tri, etc.?
- BTW, savez-vous à propos de la commande perldoc?
- y: non, je n'ai pas. Je sais maintenant. merci!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez passer une comparaison personnalisée de la fonction Perl à la routine de tri. Utilisez simplement:
La
sort
fonction accepte une comparaison personnalisée de la fonction en tant que premier argument, sous la forme d'un bloc de code. Le{...}
partie est juste ce bloc de code (voir http://perldoc.perl.org/functions/sort.html ).sort
vais appeler cette fonction de comparaison personnalisée chaque fois qu'il doit comparer deux éléments du tableau à trier.sort
passe toujours dans les deux valeurs à comparer comme$a
,$b
, et la fonction de comparaison doit retourner le résultat de la comparaison. Dans ce cas, on utilise l'opérateur de comparaison numérique (voir http://perldoc.perl.org/perlop.html#Equality-Operators ), qui a probablement été créé à cet effet :-).Solution sans vergogne volé "Perl Livre De Recettes", Chapitre 04 Sous-chapitre 15 (acheter ce livre, il en vaut la peine!)
Offre une fonction de comparaison
trier()
:De tri par défaut de la fonction est
cmp
, comparaison de chaînes de caractères, ce qui permettrait de trier(1, 2, 10)
en(1, 10, 2)
.<=>
, utilisé ci-dessus, est la numérique opérateur de comparaison.Perl
sort
par défaut trie par ordre alphabétique dans l'ordre ASCII. Pour trier numériquement, vous pouvez utiliser:C'est une FAQ Perl. À partir de la ligne de commande:
perlfaq4: Comment puis-je trier un tableau par (n'importe quoi)?
Vous devez fournir votre propre tri des sous-routine
{ $a <=> $b }
Vous pouvez prédéfinir la fonction qui doit être utilisé pour comparer les valeurs de votre tableau.
perldoc -f sort
vous donne un exemple:<=>
opérateur est utilisé pour trier numériquement.Je veux juste gagner beaucoup de temps pour personne, nouveau en Perl (comme moi) qui a cette question, à savoir comment trier un tableau numérique, parce que je n'ai pas perdu de temps mais a fait de moi un fou!
Donc, vous trouverez ici (et dans beaucoup d'autres endroits) que la façon de trier un tableau numérique est:
Maintenant que vous l'essayez, et vous obtenez un message d'erreur: "impossible d'utiliser "mon $a" une sorte de comparaison" ! (C'est parce que vous avez déjà déclaré '$a', à l'aide de " stricte.pm'). Mais alors, vous ne pouvez pas utiliser des variables déclarées, soit parce qu'elles seront rejetées comme non défini! Donc, vous pourriez vous sentir pris au piège dans une impasse, comme je l'ai fait.
J'ai eu à résoudre ce problème "à la dure", simplement parce que personne n'a pris en charge, soit ici, ou dans perldoc.perl.org ou dans tout autre endroit que j'ai visité -- de mentionner que '$a ET$b' SONT RÉSERVÉS (TOKENS) POUR CETTE UTILISATION! (Bien sûr, lorsque l'on utilise "stricte", ce qui devrait. Et ce qui est assez fou, parce que 'a' et 'b' sont parmi les plus courants de court variables utilisées dans la programmation, et logiquement, donc!)
J'espère que ce sera utile pour beaucoup de programmeurs, de nouveau en Perl, qui le visitent cette page!