zoukankan      html  css  js  c++  java
  • perl 判断数组相等的三种方法

    1.数组相等,数组成员相同,位置也相同

    一般的如果判断@array1 等于 @array2

    a.数组长度相同 $#array1=$#array2, 比较数组长度,不能使用length函数,length只适用string类型

    数组参数传递,不能直接传递

    sub compare()
    {
            my $flag=0;
            my ($first,$second)=@_;
            if (@$first==@$second) # the number of the array , don't use length() 
            {
                    for(my $i=0;$i<@$first;$i++)
                    {
                            if($first->[$i]!=$second->[$i])
                            {
                                    $flag=1;
                                    print "$first->[$i]==$second->[$i]
    ";
                            }
                    }
            }
            else
            {
                    $flag=1;
            }
            if( $flag==1)
            {
                    print "two arrays are not equal
    ";
            }
            else
            {
                     print "two arrays are  equal
    ";
            }
    }

    my @a=(1,2,3,4,5);
    my @b=(1,2,3,4,5);
    &compare(@a,@b);

    输出:two arrays are  equal

    my @a=(1,2,3,4,5);
    my @b=(1,2,3,4,5,6);
    &compare(@a,@b);

    输出:two arrays are not equal

    2.以上代码可以简化

    使用智能匹配 ~~

    注意 :智能匹配是从5.10.0开始的

    所以要require 5.10.0

    @a ~~ @b 两个数组相同

    $x ~~ @a   x在数组a中

    $x ~~%hash  相当于 exists $hash{$x};

    #/usr/bin/perl -w 
    use strict;
    require 5.10.0;
    sub compare()
    {
            my $flag=0;
            my ($first,$second)=@_;
            if( @$first ~~ @$second )
            {
            print "two arrays are  equal
    ";
    
                }
             else
           {
            print "two arrays are not equal
    ";
            }      
    }                     

     3.使用 模块

    #!/usr/bin/perl
    use strict;
    
    use Array::Compare;
    my @array1=1..10;
    my @array2=1..11;
    my @array3=1..10;
    print "compare array1 and array2
    ";
    &check(@array1,@array2);
    print "compare array1 and array3
    ";
    &check(@array1,@array3);
    
    sub check
    {
        my ($ref1,$ref2)=@_;
        my $comp=Array::Compare->new;
        if($comp->compare($ref1,$ref2))
        {
            print "the two arrays are the same
    ";
        }
        else
        {
            print "the two arrays not the same
    ";
        }
    }

    运行结果:

    D:>perl suzu.pl
    compare array1 and array2
    the two arrays not the same
    compare array1 and array3
    the two arrays are the same

  • 相关阅读:
    php多态
    ssl certificate problem: self signed certificate in certificate chain
    test plugin
    open specific port on ubuntu
    junit vs testng
    jersey rest service
    toast master
    use curl to test java webservice
    update folder access
    elk
  • 原文地址:https://www.cnblogs.com/tobecrazy/p/3118899.html
Copyright © 2011-2022 走看看