7个高级perl数组操作技巧分享

 2024-02-13 04:02:24  阅读 0

1.从数组中删除重复元素:

使用 grep 函数的代码片段:

代码:

复制代码代码如下:

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

我的%计数;

我的 @ = grep { ++$count{ $_ } < 2; } @大批;

使用转换后的哈希代码片段:

代码:

复制代码代码如下:

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

我的%看到了;

@saw{ @array } = ( );

我的 @ = 排序键 %saw;

2. 合并两个数组:

复制代码代码如下:

推 @, @;

3.快速找到最大值。 对于不知道的程序员,可以这样做:

复制代码代码如下:

我的@nums = 0 .. 1000;

我的 $max = $nums[0];

(@nums){

$max = $_ 如果 $_ > $max;

如果您知道该怎么做:

复制代码代码如下:

使用 List::Util qw(max);

我的 $ = 最大值( 0 .. 1000 );

我知道他们仍然这样做:

复制代码代码如下:

使用 List::Util qw();

我的 $ = ( qw( Fido Spot Rover ) );

字符串比较触手可及。 和总和:

复制代码代码如下:

使用 List::Util qw(sum);

我的 $sum = sum ( 1 .. 1000 );

4. 列表合并

要对数字求和,您还可以使用 List::Util:

复制代码代码如下:

使用 List::Util qw();

我的 $sum = { $a + $b } 1 .. 1000;

与sort类似,也是使用代码块作为参数,但运行机制略有不同。 每次迭代,首先从参数列表中取出前两个元素,分别设置为别名$a和$b,这样参数列表的长度就会缩短为两个元素。 然后将语句块返回的计算结果推回到参数列表的头部。 如此重复,直到列表中只剩下一个元素,即迭代计算结果$sum。

好的,就是这样:

复制代码代码如下:

我的 $ = { $a * $b } 1 .. 1000;

5.判断是否存在匹配元素

纯粹用Perl实现,查找列表中第一个满足某个条件的元素比查找所有满足条件的元素更麻烦。 下面的例子判断是否有大于1000的元素:

复制代码代码如下:

我的 $ = grep { $_ > 1000 } @list;

注意:如果@list有1亿个元素,而你要找的是1001个? grep 还是会循环一亿次,当然你可以自己控制,如下:

复制代码代码如下:

我的 $ = 0;

我的 $elem (@list) {

$ = $elem 如果 $elem > 1000;

最后如果 $;

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

复制代码代码如下:

使用 List::Util qw(first);

我的 $ = 拳头 { $_ > 1000 } @list;

List::模块中还提供了很多实用的功能:

复制代码代码如下:

我的 $ = 任意 { $_ > 1000 } @list;

我的 $ = 全部 { $_ > 1000 } @list;

我的 $ = 无 { $_ > 1000 } @list;

我的 $ = { $_ % 2 } @list;

6. 一次遍历多个列表

一般我们在同时遍历多个业务相关的列表时,经常会使用数组下标来遍历:

复制代码代码如下:

我的@a = ( ... );

我的@b = ( ... );

我的C;

我的 $i ( 0 .. $#list ) {

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

推@c,$a + $b;

看看这个,你觉得怎么样?

复制代码代码如下:

使用列表::qw();

我的@c = { $a + $b } @a, @b;

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

复制代码代码如下:

使用列表::qw();

我的 $ea = (@a, @b, @c);

我的@d;

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

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

虽然还是有点烦人,但是也没关系。

7. 数组合并

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

复制代码代码如下:

使用列表:: qw(mesh);

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

我的@evens=qw/2 4 6 8 0/;

我的@nums = 网格@odds,@evens; # 打印:1 2 3 4 ...

标签: 代码 复制 列表

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码