perl高階排序

2021-06-20 15:52:33 字數 1432 閱讀 4066

== perl 的高階排序手段

語法:my @sorted_array = sort  sub_sort_method  @original_array;

這裡的 sub_sort_method 就是我們制定的排序策略,一般是乙個sub routine 的名字,或者其**。

示例:my @result = sort by_number @some_numbers;  # sub by_number

my @result = sort @some_numbers;  #<=> 符號表示數字的比較和排序

my @descending = reverse sort @some_numbers;

my @string = sort @any_strings;  #cmp 表示字串的比較和排序

my @string = sort @any_strings;  #\l表示忽略大小寫

perl排序的理念是:你只要告訴他兩個元素的比較關係(用-1,0,1表示),perl就會為你完成任意長度的比較。

比如 其實表示的是

if ($a < $b) elsif ($a > $b) else

<=>符號只是乙個縮寫。perl只要知道我們的sort型別,就會為任意多個元素完成排序。

== 根據value對hash表的key值進行排序

首先,要理解我們無法對hash表進行排序,不然就不叫hash了。

不過,根據hash表的value我們可以為相應的key實現排序。示例如下

sub by_score <=> $score};  # $b在前面是因為我們要從大到小降序排列

my %score = ('barney" => 195, "fred" => 205, "dino" => 30);

my @ranking = sort by_score keys %score;  # 注意要這樣閱讀 sort by_score (keys %score)

注意,by_score不是對key直接做比較,而是根據key比較value,然後反過來對key進行排序。通俗的例子就是張三和李四光憑名字無法排 序,但是根據名字,我們找到他們的考試成績,然後反過來,對名字進行排序。這就是   <=> $score} 的工作。

== 二重排序與多重排序

前面的例子中,按照value進行了排名,但是如果value相同怎麼辦?如果我們希望對value相同的人按照字母順序再細排,該怎麼做呢?答案如下

sub by_score_and_name <=> $score}  # 按照value對key做降序排列

or$a cmp $b # 按照字母順序再排序

}其實意思也很好理解。因為value相同,因此比較結果返回0,這個時候結果就由 or 的另一部分來決定了。

上面的例子是二重排序。同理可以推導多重排序的方法。

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高階排序, 操作符,飛船操作符

按照要求進行的排序 複製 如下 bin perl number qw 5 10 15 3 2 4 8 6 my descending s number 這裡 a 5,b 10,因為 a在前,perl得到的結果是小數在前,也就是公升序排列 print descending n 結果如下 f perl ...