perl 遍历数组,perl数组元素个数,7个perl数组高级操作技巧分享

perl 遍历数组,perl数组元素个数,7个perl数组高级操作技巧分享

本文主要介绍七种perl数组高级操作技巧。本文介绍了阵列重复数据消除、阵列合并、寻找最大值、列表合并等。有需要的可以参考一下。

1、去除一个数组中的重复元素:

使用grep函数的代码片段:

代码:

复制代码如下:

my @array=( 'a ',' b ',' c ',' a ',' d ',1,2,5,1,5);

我的%计数;

my @ uniq _ times=grep { $ count { $ _ } 2;} @ array

使用转换哈希代码段:

代码:

复制代码如下:

my @array=( 'a ',' b ',' c ',' a ',' d ',1,2,5,1,5);

我的%锯;

@ saw { @ array }=();

my @ uniq _ array=sort keys % saw

2、合并两个array:

复制代码如下:

推@array1,@ array2

3、快速查找最大值,不知道的程序猿们,这样搞:

复制代码如下:

我的@nums=0.1000;

my $ max=$ nums[0];

foreach (@nums) {

$ max=$ _ if $ _ $ max

}

知道这个:

复制代码如下:

use List:Util qw(max);

我的max _ num=max(0.1000 );

知道他们仍然这样做:

复制代码如下:

使用List:Util qw(maxstr);

my $ max _ str=maxstr(qw(Fido Spot Rover));

字符串比较尽在掌中。和总和:

复制代码如下:

使用List:Util qw(sum);

我的$sum=sum ( 1.1000 );

4、列表归并

对数字求和,或者在List:Util中使用reduce:

复制代码如下:

使用List:Util qw(reduce);

my $sum=reduce { $a $b } 1.1000;

与sort类似,reduce以代码块为参数,但运行机制略有不同。在每次迭代中,前两个元素取自参数列表,并分别设置为别名$a和$b,这样参数列表的长度将缩短为两个元素。然后reduce将语句块返回的计算结果压回到参数列表的开头。以此类推,直到最终列表只剩下一个元素,即迭代计算结果$sum。

好了,我们开始吧:

复制代码如下:

我的$product=reduce { $a * $b } 1.1000;

5、判断是否有元素匹配

用纯Perl找到列表中满足某个条件的第一个元素比找出所有条件更麻烦。以下示例确定是否有大于1000的元素:

复制代码如下:

my $ found _ a _ match=grep { $ _ 1000 } @ list;

注:如果@list有1亿个元素,你要找的是1001个怎么办?Grep还是会循环1亿次。当然,你可以把它控制在下面:

复制代码如下:

我的$ found _ a _ match=0;

foreach my $elem (@list) {

$ found _ a _ match=$ elem if $ elem 1000;

last if $ found _ a _ match

}

还是那句话,不简单~~~List:Util有现成的:

复制代码如下:

使用List:Util qw(first);

我的$ found _ a _ match=fist { $ _ 1000 } @ list;

在List:MoreUtils模块中,还提供了许多实用函数:

复制代码如下:

我的$ found _ a _ match=any { $ _ 1000 } @列表;

我的$ all _ greater=all { $ _ 1000 } @列表;

我的$ none _ greater=none { $ _ 1000 } @列表;

我的$ all _ greater=notall { $ _ % 2 } @列表;

6、一次遍历多个列表

通常,当我们同时遍历多个与业务相关的列表时,我们经常使用数组下标来遍历:

复制代码如下:

我的@a=(.);

我的@b=(.);

我的@ c;

对于每个我的$i ( 0.$#list ) {

我的($a,$b )=( $a[$i],$ b[$ I]);

推送@c,$ a $ b;

}

看下面。你怎么想呢?

复制代码如下:

使用List:MoreUtils qw(成对);

my @c=pairwise { $a $b } @a,@ b;

Pairwise只适合两个列表的同步计算,each_array用在三个之后:

复制代码如下:

使用List:more utils qw(each _ array);

my $ea=each_array( @a,@b,@ c);

我的@ d;

while(我的$a,$b,$ c)=$ ea-(){

推送@d,$ a $ b $ c;

}

还是有点烦,不过还好。

7、数组合并

当然,你可以自己编写合并多个数组的操作,但毕竟没有MoreUtils的mesh方便:

复制代码如下:

使用List:more utils qw(mesh);

我的@ odds=qw/1 3 5 7 9/;

my @ evens=qw/2 4 6 8 0/;

my @nums=mesh @odds,@ evens#打印:1 2 3 4.

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: