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

Crian
 2003-11-17 15:54
#71943 #71943
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Hmmm... probieren wir's mal...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Schleife über alle Elemente aus Array 1
  Ist dieses Element in beiden Arrays?
      Ja: Sind diese Elemente gleich?
          Ja: Ok, wir brauchen es nicht in der Ausgabe
          Nein: Schreibe beide Elemente in das Array diff
      Nein: Nur in Array1, ok, schreibs ins Array diff
Ende der Schleife über die Elemente aus Array1

Schleife über alle Elemente aus Array 2
  Ist dieses Element in beiden Arrays?
      Ja: Ok nichts zu tun, das wurde in der ersten Schleife schon
          mit erfasst
      Nein: Nur in Array2, ok, schreibs ins Array diff
Ende der Schleife über die Elemente aus Array2


=>

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
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, $elem;
   }
}


jetzt musst Du noch die Funktion ist_element_in_array() mit Leben füllen. Diese bekommt das Element und eine Referenz auf das Array... sie sieht also ca. so aus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
}


nun testet man das ganze ... (kommt gleich in nächstem Posting)\n\n

<!--EDIT|Crian|1069078211-->
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