r2 - 06 Aug 2006 - JoenioCosta
Como descobrir a diferença ou a intersecção entre dois arrays
Problema
Você precisa descobrir quais elementos de uma lista estão presentes em uma outra lista; ou quais elementos estão presentes em apenas uma das listas.Solução
Use um hash.Discussão
Sempre que você estiver lidando com conjuntos (o que é frequentemente indicado por expressões tais como "presente em", "ausente em", "intersecção", etc), você deve pensar automaticamente em um hash. Com hashes você pode fazer estes testes facilmente:
# verificar este código
my %union = (%a,%b);
foreach (keys %union) {
if (defined $a{$_} and defined $b{$_}) {
$interseccao{$_} = 1;
} else {
$diferenca{$_} = 1;
}
}
Para obter um hash a partir dos elementos de um array:
my %a = map(($_ => 1), @a);
my %b = map(($_ => 1), @b);
