Tout d'abord, vos 2 tableaux doivent être correctement écrit.
@a = ("abc","def","efg","ghy","klm","ghn");
@b = ("def","efg","ghy","klm","ghn","klm");
Deuxièmement, pour les tableaux arbitraires (par exemple des tableaux dont les éléments peuvent être des références à d'autres structures de données), vous pouvez utiliser Data::Compare
.
Pour les tableaux dont les éléments sont scalaires, vous pouvez faire une comparaison en utilisant List::MoreUtils
pairwise BLOCK ARRAY1 ARRAY2
, où BLOCK est votre sous-programme de comparaison. Vous pouvez émuler pairwise
(si vous n'avez pas Liste :: moreutils accès) via:
if (@a != @b) {
$equals = 0;
} else {
$equals = 1;
foreach (my $i = 0; $i < @a; $i++) {
# Ideally, check for undef/value comparison here as well
if ($a[$i] != $b[$i]) { # use "ne" if elements are strings, not numbers
# Or you can use generic sub comparing 2 values
$equals = 0;
last;
}
}
}
post-scriptum Je ne suis pas sûr mais List::Compare peut toujours trier les listes. Je ne suis pas sûr s'il peut faire des comparaisons par paires.
Parce que votre question ne sait pas, vous obtenez deux types de réponses: (1) ceux qui chercher des correspondances par paires, comme '$ a [$ i] eq $ b [$ i]'; et (2) ceux qui recherchent une correspondance, par exemple '$ a [$ i] eq $ b [$ j]'. Quel est ton but? – FMc
duplicata possible de http://stackoverflow.com/questions/1609467/in-perl-is-there-a-built-in-way-to-compare-two-arrays-for-equality –
@Sinan: cette question vous marqué comme "duplicata possible" n'est pas le même que celui-ci. Il s'agit de comparer tous les éléments de deux tableaux, mais celui-ci consiste à trouver un élément commun. –