zoukankan      html  css  js  c++  java
  • 用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
  • 相关阅读:
    李超线段树 [Heoi2013]Segment
    [置顶] 九月半集训总结
    [置顶] 我想学学
    图论+前缀和 任(duty)
    模拟 飞(fly)
    入坑 可持久化线段树——主席树
    一次爆炸的联考
    HASH+平衡树 [JSOI2008]火星人prefix
    乱搞+STL平衡树 序列
    数学+图论 建造游乐场
  • 原文地址:https://www.cnblogs.com/tjxwg/p/2963178.html
Copyright © 2011-2022 走看看