Maison  >  Article  >  développement back-end  >  Comment trier les chaînes mixtes en Perl ? (exemple de code)

Comment trier les chaînes mixtes en Perl ? (exemple de code)

青灯夜游
青灯夜游original
2019-04-16 11:40:233047parcourir

Le tri en Perl peut être effectué à l'aide de la fonction prédéfinie "sort" ; cette fonction trie le tableau qui lui est transmis à l'aide de l'algorithme de tri rapide. L'article suivant vous présentera comment utiliser la fonction sort() pour trier des tableaux contenant des chaînes mixtes (c'est-à-dire des chaînes alphanumériques) de différentes manières. J'espère que cela vous sera utile. [Recommandation du didacticiel vidéo : Tutoriel Perl]

Comment trier les chaînes mixtes en Perl ? (exemple de code)

Méthode 1 : fonction sort()+substr()

Afin de comparer des chaînes à l'aide de nombres, il est très important d'obtenir le numéro de la chaîne. Nous pouvons trier le tableau de chaînes en fonction de ces nombres.

La fonction substr() peut être utilisée pour extraire ces nombres d'une chaîne. Cette fonction prend en argument le nombre de caractères de la chaîne hors chiffres.

Remarque : Toutes les chaînes alphanumériques du tableau doivent avoir la même taille.

Exemple :

use strict; 
use 5.010; 
  
# 用字母数字字符串定义数组值
my @x = qw(prin_4 Keys_8 pubg_12); 
print "原数组:\n";
print join " , ", @x;  
# 使用sort()和substr()函数对数组进行排序 
my @y = sort { substr($a, 5) <=> substr($b, 5) } @x; 
  
# 输出排序的数组
print "\n\n排序的数组:\n";
print join " , ", @y;

Sortie :

原数组:
prin_4 , Keys_8 , pubg_12

排序的数组:
prin_4 , Keys_8 , pubg_12

Méthode 2 : sort()+expression régulière

Exécuter le code ci-dessus est un travail difficile si la chaîne alphanumérique est un peu complexe, donc pour la rendre plus simple, nous pouvons utiliser des expressions régulières.

Par exemple : Si le tableau contient "Keys_8_keys" alors il est difficile de gérer ce cas, donc afin de filtrer correctement les nombres dans la chaîne, vous pouvez utiliser des expressions régulières.

Remarque : Cette méthode ne se soucie pas de savoir si les chaînes alphanumériques sont de tailles différentes.

Exemple :

use strict; 
use 5.010; 
  
# Sample string to extract  
# number from 
my $str = &#39;Key_8_key&#39;; 
  
# Regular expression to extract the number 
my ($number) = $str =~ /(\d+)/; 
  
# 输出提取的数字
print "从Key_8_key中提取的数字是:$number\n"; 
  
# 用字母数字字符串定义数组
my @x = qw(pri_4 Key_8_key pubg_12); 
  
# 排序前的数组
print "\n排序前的数组:\n"; 
print join " , ", sort @x; 
  
# 使用正则表达式
my @y = sort { ($a =~ /(\d+)/)[0] <=> ($b =~ /(\d+)/)[0] } @x; 
  
# 排序后数组
print "\n\n排序后数组\n"; 
print join " , ", @y;

Sortie :

从Key_8_key中提取的数字是:8
排序前的数组:
Key_8_key , pri_4 , pubg_12
排序后数组
pri_4 , Key_8_key , pubg_12

Remarque : Si le tableau contient des chaînes sans nombre dans certaines d'entre elles, vous peut utiliser 0 au lieu de ce nombre. Pour vérifier s'il n'y a pas de chiffres dans la chaîne, utilisez le code suivant :

my @y = sort { (($a =~ /(\d+)/)[0] || 0)  (($b =~ /(\d+)/)[0] || 0) } @x;

Exemple :

#!/usr/bin/perl 
use strict; 
use 5.010; 
  
# 混合类型字符串的数组
my @x = qw(pri_4 Key pubg_12); 
  
# 使用正则表达式
my @y = sort { (($a =~ /(\d+)/)[0] || 0) <=>  
               (($b =~ /(\d+)/)[0] || 0) } @x; 
   
# 输出排序的数组
print "排序后数组:\n"; 
print join " , ", @y;

Sortie :

排序后数组:
Key , pri_4 , pubg_12

C'est tout pour cet article L'intégralité du contenu, j'espère qu'il sera utile à l'étude de chacun. Pour un contenu plus passionnant, vous pouvez prêter attention aux colonnes de didacticiels pertinentes du site Web PHP chinois ! ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn