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

  • 相关阅读:
    如何选择开源许可证?(转)
    gdb的使用(转)
    git的使用
    2017-3-13 leetcode 4 11 15
    2017-3-12 leetcode 167 209 216
    2017-3-11 leetcode 217 219 228
    2017-3-10 leetcode 229 238 268
    1175: 零起点学算法82——find your present
    1174: 零起点学算法81——求整数绝对值
    1173: 零起点学算法80——求实数绝对值
  • 原文地址:https://www.cnblogs.com/tobecrazy/p/3118899.html
Copyright © 2011-2022 走看看