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

  • 相关阅读:
    都说学编程容易秃头,程序员到底有多忙?看看这四位网友的回答
    给你的C/C++学习路线建议
    使C语言实现面向对象的三个要素,你掌握了吗?
    digital-image-processing-image-segmentation
    TensorFlow Image Segmentation: Two Quick Tutorials
    Image Segmentation
    Links for tensorflow-gpu
    Remove image background and shadows
    How to do Semantic Segmentation using Deep learning
    TensorFlow Image Segmentation: Two Quick Tutorials
  • 原文地址:https://www.cnblogs.com/tobecrazy/p/3118899.html
Copyright © 2011-2022 走看看