如何在 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.
广告