如何在 Perl 中比较两个数组的相等性?


在 Perl 中,有两种方法可以检查两个数组是否相等。我们可以借助“Storable freeze”函数或通过创建自己的自定义函数来比较 Perl 中的两个数组。在本教程中,我们将通过示例来探讨这两种方法。

示例 1

让我们首先探讨“Storable freeze”代码并了解其工作原理。考虑下面显示的代码。

use Storable qw/freeze/;
use strict;

$Storable::canonical = 1;

my @countriesOne   = ('India', 'China', 'Russia', 'USA', 'Germany');
my @countriesTwo   = ('India', 'China', 'Russia', 'USA', 'Germany');
my @countriesThree = ('India', 'China', 'Russia', 'USA', 'Spain');

print "countriesOne = countriesTwo\n"
   if (freeze(\@countriesOne) eq freeze(\@countriesTwo));
print "countriesOne = countriesThree\n"
   if (freeze(\@countriesOne) eq freeze(\@countriesThree));
print "countriesOne != countriesThree\n"
   if (freeze(\@countriesOne) ne freeze(\@countriesThree));

在此代码中,我们使用了三个数组,其中只有两个相似。然后,在print语句中,我们使用freeze关键字和eq关键字来比较数组的相等性。

输出

如果我们在终端中运行以上代码,它将产生以下输出 −

countriesOne = countriesTwo
countriesOne != countriesThree

示例 2

现在,让我们考虑一个示例,其中我们将创建自己的自定义函数来比较数组的相等性。考虑下面显示的代码。

my @countriesOne = ('India', 'China', 'Russia', 'USA', 'Germany');
my @countriesTwo = ('India', 'China', 'Russia', 'USA', 'Germany');
my @countriesThree = ('India', 'China', 'Russia', 'USA', 'Spain');

print "(@countriesOne) and (@countriesTwo) are equal sets.\n" if
isIdentical( \@countriesOne, \@countriesTwo );

print "(@countriesOne) and (@countriesThree) are equal sets.\n" if
isIdentical( \@countriesOne, \@countriesThree );

print "(@countriesTwo) and (@countriesThree) are equal sets.\n" if
isIdentical( \@countriesTwo, \@countriesThree );

sub isIdentical {
   my( $left, $right ) = @_;
   return 0 if scalar @$left != scalar @$right;
   my %hash;
   @hash{ @$left, @$right } = ();
   return scalar keys %hash == scalar @$left;
}

在此代码中,我们使用“sub”中的“scalar”关键字来比较两个数组的相等性。

输出

如果您在终端中运行此代码,它将产生以下输出 −

(India China Russia USA Germany) and (India China Russia USA Germany) are equal sets.

更新日期: 26-12-2022

2K+ 浏览

开启您的职业生涯

完成课程并获得认证

开始学习
广告