perl 判断数组相等的三种方法
1.数组相等,数组成员相同,位置也相同
一般的如果判断@array1 等于 @array2
a.数组长度相同 $#array1=$#array2, 比较数组长度,不能使用length函数,length只适用string类型
数组参数传递,不能直接传递
sub compare()
{
my $flag=;
my ($first,$second)=@_;
if (@$first==@$second) # the number of the array , don't use length()
{
for(my $i=;$i<@$first;$i++)
{
if($first->[$i]!=$second->[$i])
{
$flag=;
print "$first->[$i]==$second->[$i]\n";
}
}
}
else
{
$flag=;
}
if( $flag==)
{
print "two arrays are not equal\n";
}
else
{
print "two arrays are equal\n";
}
}
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.;
sub compare()
{
my $flag=;
my ($first,$second)=@_;
if( @$first ~~ @$second )
{
print "two arrays are equal\n"; }
else
{
print "two arrays are not equal\n";
}
}
3.使用 模块
#!/usr/bin/perl
use strict; use Array::Compare;
my @array1=..;
my @array2=..;
my @array3=..;
print "compare array1 and array2\n";
&check(\@array1,\@array2);
print "compare array1 and array3\n";
&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\n";
}
else
{
print "the two arrays not the same\n";
}
}
运行结果:
D:\>perl suzu.pl
compare array1 and array2
the two arrays not the same
compare array1 and array3
the two arrays are the same
perl 判断数组相等的三种方法的更多相关文章
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...
- 判断图连通的三种方法——dfs,bfs,并查集
Description 如果无向图G每对顶点v和w都有从v到w的路径,那么称无向图G是连通的.现在给定一张无向图,判断它是否是连通的. Input 第一行有2个整数n和m(0 < n,m < ...
- 数组k平移三种方法(java)
上代码,本文用了三种方法实现,时间复杂度不一样,空间复杂度都是o(1): public class ArrayKMove { /** * 问题:数组的向左k平移,k小于数组长度 * @param ar ...
- 【JS】JS数组添加元素的三种方法
1.push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 1).语法: arrayObject.push(newelement1,newelement2,....,newelement ...
- js数组去重的三种方法
<script type="text/javascript"> /*// 第一种冒泡法删除 var arr=[1,2,2,78,3,456,456]; for(var ...
- js 数组去重的三种方法(unique)
方法一: Array.prototype.unique=function(){ var arr=[];//新建一个临时数组 for(var i=0;i<this.length;i++){//遍历 ...
- 数组去重的三种方法及from方法
直接上代码: var str="adbbckddwerivka"; var arr=str.split(""); console.log(arr); //ind ...
- Jquery判断Checkbox是否选中三种方法
方法一:if ($("#checkbox-id")get(0).checked) { // do something} 方法二:if($('#checkbox-id').is ...
- 数组去重的三种方法 es6
[1,2,3,4,5,6,7,8,9,2,2,3,3,4,1].filter(function(el,index,arr){ return (index === arr.indexOf(el)); } ...
随机推荐
- mysql主从复制(超简单)
mysql主从复制(超简单) 怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql ...
- Linux下的微秒级定时器: usleep, nanosleep, select, pselect
Linux下的微秒级定时器: usleep, nanosleep, select, pselect 标签: linuxnulldelaystructdate 2012-02-07 23:29 4979 ...
- 真正理解linux的inode?
linux 在整个架构上可以看作是三层: 1.底层代码, (引导层strip) 跟硬件沟通的那一层的代码(可能是汇编+c), 驱动底层的; strain: n./v. 拉紧, 张力, 气质, 风格, ...
- objective-c与c++的差异
oc的编译指令为 clang -fobjc-arc -framework Foundation test.m -o test oc中,1表示YES,0表示NO.并不是非0值都是YES,这是因为BOOL ...
- web开发前端学习
bootstrap: http://www.bootcss.com/ bootstrap: http://bootsnipp.com/snippets/featured/single-colum ...
- 基于Windows10安装Ubuntu双系统
步骤: 1.从Ubuntu的官网上下载Ubuntu的iSO安装包. http://www.ubuntu.com/download/ 我安装的版本是Ubuntu 14.04.3 LTS 64位版本 2. ...
- 用CSS画个三角形
<!DOCTYPE html> <html> <head> <style type="text/css"> #trangle { d ...
- 字符串匹配算法——KMP算法
处理字符串的过程中,难免会遇到字符匹配的问题.常用的字符匹配方法 1. 朴素模式匹配算法(Brute-Force算法) 求子串位置的定位函数Index( S, T, pos). 模式匹配:子串的定位操 ...
- mysql python image
连接mysql数据库: cnx = mysql.connector.connect(user='joe', database='test') Connector/Python参数列表 Argument ...
- MongoDB 基础知识
一. 基础知识 1. MongoDB是一个文档型的数据库,文档就是一个键值对的有序集合. 例如这样:{"greeting":"hello world"} 2. ...