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

  • 相关阅读:
    Cuckoo Hashing
    Microsoft Windows的消息循环
    Simplex, Full-Duplex and Half-Duplex Operation
    Linux 技巧:让进程在后台运行更可靠的几种方法
    https://learnku.com/docs/go-blog/qihoo/6532 。 heap size went up to 69G, with maximum garbage collection (GC)
    Go GC: Latency Problem Solved
    Sapphire: Copying GC Without Stopping the World
    The Go Blog Getting to Go: The Journey of Go's Garbage Collector
    xml CDATA
    Joseph cicyle's algorithm
  • 原文地址:https://www.cnblogs.com/tobecrazy/p/3118899.html
Copyright © 2011-2022 走看看