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