Array::Utils von Sergei A. Fedorov erlaubt es schnell und einfach Arrays von Zeichenketten (Strings) zu vergleichen.
Für andere Datentypen ist dieses Modul, trotz seines eher generischen Namens, nicht geeignet.
Array::Utils stellt folgende Funktionen zur Verfügung:
- Symmetrische Differenz zweier Arrays
- Schnittmenge zweier Arrays
- Vereinigungsmenge zweier Arrays
- Subtraktion zweier Arrays
Symmetrische Differenz
Es handelt sich um die Menge aller Elemente, die jeweils in einer, aber nicht in beiden Mengen liegen.
#!/usr/bin/perl use strict; use warnings; use Array::Utils qw(:all); my @list_01 = qw/Hans Otto Fritz/; my @list_02 = qw/Wilhelm Otto/; # symmetric difference my @diff = array_diff(@list_01, @list_02); print join(", ", @list_01), "\n"; print join(", ", @list_02), "\n"; print join(", ", @diff), "\n";
Das Programm erzeugt folgende Ausgabe:
Hans, Otto, Fritz Wilhelm, Otto Hans, Fritz, Wilhelm
Intersection
Die Schnittmenge (Durchschnittsmenge) zweier Mengen A und B ist die Menge aller Elemente, die sowohl zu A als auch zu B gehören.
#!/usr/bin/perl use strict; use warnings; use Array::Utils qw(:all); my @list_01 = qw/Hans Otto Fritz/; my @list_02 = qw/Wilhelm Otto/; # intersection my @intersect = intersect(@list_01, @list_02); print join(", ", @list_01), "\n"; print join(", ", @list_02), "\n"; print join(", ", @intersect), "\n";
Das Programm erzeugt folgende Ausgabe:
Hans, Otto, Fritz Wilhelm, Otto Otto
Union
Die Vereinigungsmenge zweier Mengen A und B ist die Menge aller Elemente, die zu A oder zu B oder zu beiden Mengen gehören.
#!/usr/bin/perl use strict; use warnings; use Array::Utils qw(:all); my @list_01 = qw/Hans Otto Fritz/; my @list_02 = qw/Wilhelm Otto/; # unique union my @unique = unique(@list_01, @list_02); print join(", ", @list_01), "\n"; print join(", ", @list_02), "\n"; print join(", ", @unique), "\n";
Das Programm erzeugt folgende Ausgabe:
Hans, Otto, Fritz Wilhelm, Otto Otto, Wilhelm, Hans, Fritz
Durch das Aussortieren der doppelten Elemente, ändert sich auch die Reihenfolge der Elemente im @unique.
Subtraktion
Die Subtraktion liefert die Elemente, die nur zu der einen Menge, aber nicht zu der anderen Menge gehören.
#!/usr/bin/perl use strict; use warnings; use Array::Utils qw(:all); my @list_01 = qw/Hans Otto Fritz/; my @list_02 = qw/Wilhelm Otto/; # get items from array @list_01 that are not in array @list_02 my @minus = array_minus(@list_01, @list_02); print join(", ", @list_01), "\n"; print join(", ", @list_02), "\n"; print join(", ", @minus), "\n";
Das Programm erzeugt folgende Ausgabe:
Hans, Otto, Fritz Wilhelm, Otto Hans, Fritz
Siehe auch:
- Array::Utils
- Array::Utils Reviews
- perlfaq4
- List::Compare
- Array::Compare
- Data::Compare
- Test::Deep
- How can I compare arrays in Perl?
- In Perl, is there a built in way to compare two arrays for equality?
- Comparing Two Arrays Using Perl
- Re: How do I compare two arrays?
- Symmetrische Differenz
- Scnittmenge
- Vereinigungsmenge
Bildnachweis
photo credit: myth of homogeneity via photopin (license)