Frank Schönmann: Zwei Arrays "elegant" vergleichen

Beitrag lesen

hi!

ich möchte den Inhalt zweier Arrays vergleichen, und
will die Elemente ausgegeben bekommen, die unterschiedlich
sind (sowol, vom einen als auch vom anderen).

Die Vehemenz, mit der hier die Perl-Dokumentation ignoriert wird, ist
erstaunlich... ;))

Aus der perlfaq[1]:

=== cut ===
How do I compute the difference of two arrays? How do I compute the
intersection of two arrays?

Use a hash. Here's code to do both and more. It assumes that each
element is unique in a given array:

@union = @intersection = @difference = ();
    %count = ();
    foreach $element (@array1, @array2) { $count{$element}++ }
    foreach $element (keys %count) {
        push @union, $element;
        push @{ $count{$element} > 1 ? @intersection : @difference }, $element;
    }

Note that this is the symmetric difference, that is, all elements in
either A or in B but not in both. Think of it as an xor operation.
=== cut ===

Mit der obigen Routine kann man noch nicht feststellen, in welchem
Array ein bestimmtes Element fehlt. Dafür hat der Algorithmus
lineare Effizienz und keine quadratische wie der, den Sven vorge-
schlagen hat... :)

bye, Frank!

[1] http://www.perldoc.com/perl5.6.1/pod/perlfaq4.html#How-do-I-compute-the-difference-of-two-arrays---How-do-I-compute-the-intersection-of-two-arrays-