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