Thread Wieder mal ein Array-Vergleich Problem
(13 answers)
Opened by
Arasiel
at 2003-11-17 09:57
User since 2003-08-04
5873
Artikel
ModeratorIn
Und schon sieht man, dass man sich hier und da vertan hat, aber nach ein paar Testläufen ist das Ergebnis fertig:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
#!/usr/bin/perl use diagnostics; use strict; use warnings;
use Data::Dumper;# nur für die Ausgabe
my @array1 = ("apfel 752 523 grün", "birne 448 038 gelb", "orange 361 098 orange", ); my @array2 = ("apfel 752 523 grün", "birne 448 638 gelb", "zitrone 361 098 gelbgrün", ); my @diff = ();
sub ist_element_in_array ($$) { my $elem = shift; my $array = shift;
my $elem_wort = (split / /, $elem)[0];
for my $aelem (@$array) { my $array_wort = (split / /, $aelem)[0]; if ($elem_wort eq $array_wort) { return $aelem; } }
return undef; }
for my $elem (@array1) { my $elem2 = ist_element_in_array($elem, \@array2); if (defined $elem2) { if ($elem eq $elem2) { #Ja: Ok, wir brauchen es nicht in der Ausgabe } else { #Nein: Schreibe beide Elemente in das Array diff push @diff, ($elem, $elem2); } } else { # Nein: Nur in Array1, ok, schreibs ins Array diff push @diff, $elem; } }
for my $elem2 (@array2) { if (ist_element_in_array($elem2, \@array1)) { # Ja: Ok nichts zu tun, das wurde in der ersten Schleife # schon mit erfasst } else { # Nein: Nur in Array2, ok, schreibs ins Array diff push @diff, $elem2; } }
print "Array 1 :\n", Dumper(\@array1), "\n", "Array 2 :\n", Dumper(\@array2), "\n", "Array diff:\n", Dumper(\@diff), "\n";
mit der Ausgabe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Array 1 : $VAR1 = [ 'apfel 752 523 grün', 'birne 448 038 gelb', 'orange 361 098 orange' ];
Array 2 : $VAR1 = [ 'apfel 752 523 grün', 'birne 448 638 gelb', 'zitrone 361 098 gelbgrün' ];
Array diff: $VAR1 = [ 'birne 448 038 gelb', 'birne 448 638 gelb', 'orange 361 098 orange', 'zitrone 361 098 gelbgrün' ];
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
View full thread Wieder mal ein Array-Vergleich Problem
|