這篇文章主要介紹了7個perl陣列高階操作技巧,本文講解了陣列去重、陣列合併、查詢最大值、列表歸併等內容,需要的朋友可以參考下
1、去除乙個陣列中的重複元素:
使用grep函式**片段:
**:複製**
**如下:
my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
my %count;
my @uniq_times = grep < 2; } @array;
使用轉換hash**片段:
**:複製**
**如下:
my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
my %saw;
@saw = ( );
my @uniq_array = sort keys %saw;
2、合併兩個array:
複製**
**如下:
push @array1, @array2;
3、快速查詢最大值,不知道的程式猿們,這樣搞:
複製**
**如下:
my @nums = 0 .. 1000;
my $max = $nums[0];
foreach (@nums)
知道的這樣搞:
複製**
**如下:
use list::util qw(max);
my $max_num = max( 0 .. 1000 );
知道的他們還這樣搞:
複製**
**如下:
use list::util qw(maxstr);
my $max_str = maxstr ( qw( fido spot rover ) );
字串比較玩弄於掌中。還有sum:
複製**
**如下:
use list::util qw(sum);
my $sum = sum ( 1 .. 1000 );
4、列表歸併
數字求和,也可以用list::util中的reduce:
複製**
**如下:
use list::util qw(reduce);
my $sum = reduce 1 .. 1000;
與sort類似,reduce也是用code block作為引數,不過執行機制稍微不同。每次迭代,先從引數列表取出前面兩個元素,分別設定為別名$a和$b,這樣引數列表的長度就會縮短為兩個元素。然後reduce把語句塊返回的計算結果再壓回到引數列表的頭部。如此往復,直到最後列表裡只剩下乙個元素,也就是迭代的計算結果$sum。
好了,可以這樣了:
複製**
**如下:
my $product = reduce 1 .. 1000;
5、判斷是否有元素匹配
純粹用perl實現,找到列表中第乙個符合某條件的元素,比找出所有符合條件的要麻煩一些。下面的例子,判斷是否有大於1000的元素:
複製**
**如下:
my $found_a_match = grep @list;
注意:如果@list有一億個元素,而要找的就是1001?grep仍然還會迴圈一億次,當然你可以向下面自己控制下:
複製**
**如下:
my $found_a_match = 0;
foreach my $elem (@list)
還是那句話,不簡單~~~list::util有現成的東西:
複製**
**如下:
use list::util qw(first);
my $found_a_match = fist @list;
在list::moreutils模組中,也提供很多的實用函式:
複製**
**如下:
my $found_a_match = any @list;
my $all_greater = all @list;
my $none_greater = none @list;
my $all_greater = notall @list;
6、一次遍歷多個列表
一般我們同時遍歷多個業務相關的列表時,往往用陣列下標遍歷:
複製**
**如下:
my @a = ( ... );
my @b = ( ... );
my @c;
foreach my $i ( 0 .. $#list )
看下面這個,你的感覺是?
複製**
**如下:
use list::moreutils qw(pairwise);
my @c = pairwise @a, @b;
pairwise只適合兩個列表的同步計算,三個後用each_array:
複製**
**如下:
use list::moreutils qw(each_array);
my $ea = each_array( @a, @b, @c );
my @d;
while ( my ( $a, $b, $c ) = $ea->() )
雖然還是有點煩,不過也還好了。
7、陣列合併
合併多個陣列的操作當然你可以自己寫,但終究不如moreutils的mesh方便:
複製**
**如下:
use list::moreutils qw(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 ...
PERL的陣列操作
此次我們說下,關於perl中陣列的頭尾操作,當然這是在不使用索引的情況下,類似與彙編當中,push和pop是在尾部,或者說在陣列的右邊進行的新增或者刪除操作,演示 如下 array 5.9 fred pop array 原陣列array中是 5 6 7 8 9,pop之後則是5 6 7 8 prin...
perl的陣列操作
list b 生成連續的一列數字或字母 b my numbers 1.100 my chars a.z b 新增或者刪除元素 b shift 移除陣列的第乙個元素 unshift 新增乙個元素到陣列的最後 push 新增乙個元素到陣列的第乙個元素 pop 去除陣列的最後乙個元素。table func...
Perl中的陣列操作
1 陣列的長度 如果把陣列變數賦值給標量變數,那麼賦給標量變數的就是陣列的長度 a array 標量變數 a中存放的是陣列 array的長度,即 陣列中元素的個數 a,b,c 1,2,3 則把1賦值給 a,把2賦值給 b,把3賦值給 c 陣列中的最後乙個元素的下標索引由陣列的特殊變數 arrayna...