首頁  >  文章  >  後端開發  >  Perl中如何對混合字串進行排序? (程式碼範例)

Perl中如何對混合字串進行排序? (程式碼範例)

青灯夜游
青灯夜游原創
2019-04-16 11:40:233153瀏覽

Perl中的排序可以使用預先定義的函數「sort」來完成;此函數使用快速排序演算法對傳遞給它的陣列進行排序。以下這篇文章就為大家介紹如何使用sort()函數以各種方式對包含混合形式的字串(即字母數字字串)的陣列進行排序,希望對大家有所幫助。 【影片教學推薦:Perl教學

Perl中如何對混合字串進行排序? (程式碼範例)

#方法一:sort() substr()函數

為了比較使用數字的字串,從字串中取得數字是非常重要的。我們可以根據這些數字,對字串陣列進行排序。

substr()函數可以用來從字串中提取這些數字。此函數將字串中不包括數字的字元數作為參數。

注意:陣列中的所有字母數字字串必須具有相同的大小。

範例:

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;

輸出:

原数组:
prin_4 , Keys_8 , pubg_12

排序的数组:
prin_4 , Keys_8 , pubg_12

#方法二:sort() 正規表示式

如果字母數字字串有點複雜,執行上面的程式碼是一項艱鉅的工作,因此,為了更簡單,我們可以使用正規表示式。

例如:如果陣列包含“Keys_8_keys”,那麼很難處理這種情況,因此為了正確過濾字串中的數字,可以使用正規表示式。

注意:此方法不關心字母數字字串是否有不同的大小。

範例:

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;

輸出:

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

「註記:如果陣列包含其中某些字串中沒有數字的字串,則可以使用0代替該數字。要檢查字串中是否沒有數字,請使用以下程式碼:

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

範例:

#!/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;

輸出:

排序后数组:
Key , pri_4 , pubg_12

以上就是本篇文章的全部內容,希望能對大家的學習有所幫助。更多精彩內容大家可以追蹤php中文網相關教學欄位! ! !

以上是Perl中如何對混合字串進行排序? (程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn