Perl可以直接將列表用作數組,并使用表達式提取一個或多個元素,這種操作稱為列表切片,下面就跟著武林技術頻道小編的步伐來分享7個perl數組高級操作技巧。
1、去除一個數組中的重復元素:
使用grep函數代碼片段:
代碼:
?
使用轉換hash代碼片段:
代碼:
?
2、合并兩個array:
?
?
3、快速查找最大值,不知道的程序猿們,這樣搞:
?
知道的這樣搞:
?
?
知道的他們還這樣搞:
?
?
字符串比較玩弄于掌中。還有sum:
?
?
?
4、列表歸并
數字求和,也可以用List::Util中的reduce:
與sort類似,reduce也是用code block作為參數,不過運行機制稍微不同。每次迭代,先從參數列表取出前面兩個元素,分別設置為別名$a和$b,這樣參數列表的長度就會縮短為兩個元素。然后reduce把語句塊返回的計算結果再壓回到參數列表的頭部。如此往復,直到最后列表里只剩下一個元素,也就是迭代的計算結果$sum。
?
好了,可以這樣了:
?
5、判斷是否有元素匹配
純粹用Perl實現,找到列表中第一個符合某條件的元素,比找出所有符合條件的要麻煩一些。下面的例子,判斷是否有大于1000的元素:
注意:如果@list有一億個元素,而要找的就是1001?grep仍然還會循環一億次,當然你可以向下面自己控制下:
?
?
還是那句話,不簡單~~~List::Util有現成的東西:
?
?
在List::MoreUtils模塊中,也提供很多的實用函數:
?
?
?
6、一次遍歷多個列表
一般我們同時遍歷多個業務相關的列表時,往往用數組下標遍歷:
?
foreach my $i ( 0 .. $#list ) {
my ( $a, $b ) = ( $a[$i], $b[$i] );
push @c, $a + $b;
}
看下面這個,你的感覺是?
?
?
pairwise只適合兩個列表的同步計算,三個后用each_array:
?
?
?
my $ea = each_array( @a, @b, @c );
my @d;
while ( my ( $a, $b, $c ) = $ea->() ) {
push @d, $a+$b+$c;
}
雖然還是有點煩,不過也還好了。
7、數組合并
合并多個數組的操作當然你可以自己寫,但終究不如MoreUtils的mesh方便:
?
my @odds = qw/ 1 3 5 7 9/;
my @evens= qw/ 2 4 6 8 0/;
my @nums = mesh @odds, @evens; # print: 1 2 3 4 ...
以上就是關于分享7個perl數組高級操作技巧的相關介紹,雖然現在的技術人員需求沒以前那么火爆,但是它競爭沒那么大,所以還是很有前途的。
新聞熱點
疑難解答
圖片精選