hi,
Die Funktion erwartet Arrays, also gib ihr Arrays ;) Zur Zeit musst du jedes Array, das im Hash ist, einzeln angeben. Aber du findest dafür sicher eine einfache Lösung. Mir fällt so spät nichts mehr ein ;)
nach dem man ein wenig geschlaffen hat, kommen einem
Ideen und richtige Ansätze "fast" von aleine :)
Wie gesagt ich hatte Hash zu verfügung und müsste das
irgendwie an die Funktion übergeben.
Hier der (vielleicht nicht ganz so gute) Abschluss:
--------------- code ---------------
#!perl.exe -w
#print "Content-type: text/html\n\n";
nehmen wir an - wir haben vier Arrays
@a = ("eins", "zwei", "drei", "vier", "fuenf", "acht");
@b = ("zwei", "drei", "fuenf", "acht");
@c = ("eins", "drei", "fuenf", "acht");
@d = ("drei", "acht");
#@d = ("two", "five"); # für nicht erfolgreiche Suche
#######################
wir wollen nicht die Arrays an die Funktion
übergeben, sondern Hash der die Arrays enhält
für den Beispiel lese ich die Arrays erstmal in ein Hash
$anzahl_der_arrays = 4;
for($akt_lista = 1; $akt_lista <= $anzahl_der_arrays; $akt_lista++) {
if($akt_lista == 1) { push @{ $hash{$akt_lista} }, @a; }
if($akt_lista == 2) { push @{ $hash{$akt_lista} }, @b; }
if($akt_lista == 3) { push @{ $hash{$akt_lista} }, @c; }
if($akt_lista == 4) { push @{ $hash{$akt_lista} }, @d; }
}
und jetzt füllen wir den Array @aufruf (Funktionsaufruf) mit Daten
foreach $schluessell (keys %hash) {
push @aufruf, @{ $hash{$schluessell} };
}
@results = &intersect(@aufruf);
if(@results) {
print "<br>Intersection:<b> @results</b>\n";
} else {
print "<br>Leider gab es keine gemeinsamkeiten.\n";
}
sub intersect {
hier vielleicht
local $i;
for (@{scalar shift}) {
$union[0]{$_} = 1;
}
while (@_) {
$i++;
for (@{scalar shift}) {
if ($union[$i-1]{$_}) { $union[$i]{$_} = 1; }
}
}
return keys %{$union[$i]};
}
--------------- code end ------------
biss dann
Slobo