perl的排序問題

2022-07-19 02:18:11 字數 1558 閱讀 6447

perl自帶有排序函式sort,sort的用法主要有兩種:

for my $id (sort keys %hash)###這樣寫可以先對%hash裡的keys值按數字排序後依次提取出來

1. 直接使用

@articles = sort @files;
上述例子中,sort將依據標準的字串排序法則對陣列files裡包含的元素進行排序。也就是說陣列裡定義的數字或者字母將被轉換成ascii碼後進行排序。

2.自定義排序法則

@articles = sort  @files;
上述例子中的"sub rule"指的是自定義排序法則的子程式(subroutine)。

在介紹自定義排序法則的子程式之前,讓我們先來看看perl裡的比較符(comparison operators)

前面幾個很容易懂,最後乙個"<=>"或者"cmp"是用來比較兩個數字或者字串之間的關係。

$a 和 $b 之間的關係

$a <=> $b 的返回值

$a 大於$b

1$a 等於$b

0$a 小於$b

-1因此,常用的自定義排序法則的子程式可以這樣寫:

#數字比較

@sorted = sort  @not_sorted 

#字母比較1

@sorted = sort  @not_sorted

#字母比較2, 先轉換成小寫比較
@sorted = sort  @not_sorted
這裡的$a 和$b其實是perl固有的全域性變數(build-in/package globals) , 我們把自定義排序法則的子程式寫成: ,perl編譯器將得知你定義了的排序法則是採用數字比較大小。我們在對hash按key進行排序時候常用到自定義排序法。例如:

foreach(sort<=>$mapword}

keys %mapword)\n";

}
#1. 'keys % mapword' 得到的是乙個陣列

#2. 用全域性變數,$a, $b定義了對比法則,將對%mapword的key數值按從小到大順序排列
#3. 列印出$key值和對應的hash值
既然是自定義法則,你還可以把比較法則定義成你自己想要的,比如說,你要把一組數安字母順序排列,但是你要讓dh永遠排在前面,你可以這麼寫:

@words = ("hi", "

da", "

abc", "

dh", "

man");

@sorted = sort 

elsif ($b eq 'dh')  

else  

} @words;
print @sorted;

#列印結果為:dhabcdahiman

perl高階排序

perl 的高階排序手段 語法 my sorted array sort sub sort method original array 這裡的 sub sort method 就是我們制定的排序策略,一般是乙個sub routine 的名字,或者其 示例 my result sort by numb...

Perl陣列排序

本文我們學習如何用perl對字串或者數字陣列進行排序。perl有個內建函式叫做sort毫無疑問的可以排序乙個陣列。其最簡單的形式是傳遞乙個陣列,它會返回排序後的元素組成的陣列。sorted sort original。usr bin perl usestrict use warnings use 5...

perl高階排序

perl 的高階排序手段 語法 my sorted array sort sub sort method original array 這裡的 sub sort method 就是我們制定的排序策略,一般是乙個sub routine 的名字,或者其 示例 my result sort by numb...