Das Sortieren in Perl kann mit der vordefinierten Funktion „sort“ erfolgen; diese Funktion sortiert das an sie übergebene Array mithilfe des Quicksort-Algorithmus. Im folgenden Artikel erfahren Sie, wie Sie mit der Funktion sort() Arrays mit Zeichenfolgen in gemischter Form (d. h. alphanumerische Zeichenfolgen) auf verschiedene Weise sortieren können. [Video-Tutorial-Empfehlung: Perl-Tutorial]
Methode 1: Funktion sort()+substr()
Um Zeichenfolgen anhand von Zahlen zu vergleichen, ist es sehr wichtig, die Zahl aus der Zeichenfolge zu ermitteln. Wir können das String-Array basierend auf diesen Zahlen sortieren.
Mit der Funktion substr() können diese Zahlen aus einem String extrahiert werden. Diese Funktion verwendet als Argument die Anzahl der Zeichen in der Zeichenfolge, ausgenommen Zahlen.
Hinweis: Alle alphanumerischen Zeichenfolgen im Array müssen dieselbe Größe haben.
Beispiel:
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;
Ausgabe:
原数组: prin_4 , Keys_8 , pubg_12 排序的数组: prin_4 , Keys_8 , pubg_12
Methode 2: sort()+regulärer Ausdruck
Das Ausführen des obigen Codes ist eine schwierige Aufgabe, wenn die alphanumerische Zeichenfolge etwas komplex ist. Um es einfacher zu machen, können wir reguläre Ausdrücke verwenden.
Beispiel: Wenn das Array „Keys_8_keys“ enthält, ist es schwierig, diesen Fall zu handhaben. Um die Zahlen in der Zeichenfolge korrekt zu filtern, können Sie daher reguläre Ausdrücke verwenden.
Hinweis: Dieser Methode ist es egal, ob die alphanumerischen Zeichenfolgen unterschiedliche Größen haben.
Beispiel:
use strict; use 5.010; # Sample string to extract # number from my $str = 'Key_8_key'; # 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;
Ausgabe:
从Key_8_key中提取的数字是:8 排序前的数组: Key_8_key , pri_4 , pubg_12 排序后数组 pri_4 , Key_8_key , pubg_12
Hinweis: Wenn das Array Zeichenfolgen enthält, von denen einige keine Zahlen haben, können Sie verwenden 0 ersetzt diese Zahl. Um zu überprüfen, ob die Zeichenfolge keine Zahlen enthält, verwenden Sie den folgenden Code:
my @y = sort { (($a =~ /(\d+)/)[0] || 0) (($b =~ /(\d+)/)[0] || 0) } @x;
Beispiel:
#!/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;
Ausgabe:
排序后数组: Key , pri_4 , pubg_12
Das ist alles für diesen Artikel, ich hoffe es Kann Es wird für das Lernen aller hilfreich sein. Weitere spannende Inhalte finden Sie in den entsprechenden Tutorial-Kolumnen auf der chinesischen PHP-Website! ! !
Das obige ist der detaillierte Inhalt vonWie sortiere ich gemischte Strings in Perl? (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!