Thread Wieder mal ein Array-Vergleich Problem (13 answers)
Opened by Arasiel at 2003-11-17 09:57

Crian
 2003-11-17 16:07
#71944 #71944
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Und schon sieht man, dass man sich hier und da vertan hat, aber nach ein paar Testläufen ist das Ergebnis fertig:

Code: (dl )
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

Code: (dl )
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