用List::Util 和 List::MoreUtils 简化列表处理

1.快速查找最大值,最小值

use List::Util qw(max min) ;

my $max_number = max ( 0 .. 1000 );

my $min_number =  min (0 .. 1000 );

此外还有maxstr子程序能返回列表中最大的字符串,minstr子程序返回列表中最小的字符串

use List::Util qw(maxstr);

my $max_string = maxstr(qw(Fido Spot Rover));

sum子程序所有数字求和

use List::Util qw(sum);

my $sum = sum ( 1.. 1000) ;

 

2.列表归并

    $foo = reduce { $a < $b ? $a : $b } 1..10       # min

    $foo = reduce { $a lt $b ? $a : $b } 'aa'..'zz' # minstr

    $foo = reduce { $a + $b } 1 .. 10               # sum

    $foo = reduce { $a . $b } @bar                  # concat

 

3. 判断是否有元素匹配

纯粹用Perl实现的话,找出列表中的第一个符合某项条件的元素,比找出所有符合条件的要麻烦一些。

first子程序就是为了解决这样的问题而设计的,并且会告诉第一个元素是什么。一旦找到答案理解停止。

    $foo = first { defined($_) } @list    # first defined value in @list

    $foo = first { $_ > $value } @list    # first value in @list which

                                          # is greater than $value

 

4.一次遍历多个列表

    @a = (1 .. 5);

    @b = (11 .. 15);

    @x = pairwise { $a + $b } @a, @b;   # returns 12, 14, 16, 18, 20



    # mesh with pairwise

    @a = qw/a b c/;

    @b = qw/1 2 3/;

    @x = pairwise { ($a, $b) } @a, @b;  # returns a, 1, b, 2, c, 3

对于三个及以上的列表可选用each_array 子程序

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

    while ( my ($a, $b, $c) = $ea->() )   { .... }

 

5.数组合并

    @x = qw/a b c d/;

    @y = qw/1 2 3 4/;

    @z = mesh @x, @y;       # returns a, 1, b, 2, c, 3, d, 4



    @a = ('x');

    @b = ('1', '2');

    @c = qw/zip zap zot/;

    @d = mesh @a, @b, @c;   # x, 1, zip, undef, 2, zap, undef, undef, zot

你可能感兴趣的:(list)