Welches Element aus welcher Liste???
Stefan
- perl
Hallöchen!
Ich habe ein kleines Problem und hoffe ihr könnte mir wieder mal helfen.
Ich habe zwei Arrays bei denen ich überprüfe ob sie gleich oder verschieden sind. Wenn sie verschieden sind soll er mir die Elemente die verschieden sind in eine Liste speichern.
Soweit funktioniert auch alles wie in der Perl-FAQ [1] beschrieben.
Nun würde ich aber gerne noch wissen in welchem der beiden Arrays das Element vorhanden war. Natürlich könnte ich einfach danach suchen aber das wäre bei großen Arrays ein zu großer Aufwand.
Lieber wäre es mir wenn er mir die Elemente die verschieden sind gleich in einen Hash(statt in die Liste) schreiben würde und dort auch reinschreibt aus welchem Array der Wert stammt.
Ich habs einfach mit % statt @ probiert, aber da sagt er nur "Type of arg 1 to push must be array (not hash dereference)".
Was mach ich falsch? Vielleicht ist ja auch mein Ansatz vollkommen verkehrt...
bin für jede Anregung die mir weiterhelfen könnte dankbar!
Grüßle
Stefan
[1]= Perl FAQ 4
How do I compute the difference of two arrays? How do I compute the intersection of two arrays?
Hi,
Soweit funktioniert auch alles wie in der Perl-FAQ [1] beschrieben.
schön zu hören :-)
Nun würde ich aber gerne noch wissen in welchem der beiden Arrays das Element vorhanden war.
Gehe die beiden Listen nacheinander durch, statt in der selben Schleife. Bei der ersten addierst Du in dem Hash, bei der zweiten substrahierst Du. Ist das Element in beiden Listen vorhanden, ist das Ergebnis 0; nur in der ersten heißt 1; nur in der zweiten -1.
Ich habs einfach mit % statt @ probiert,
Verschiedene Datentypen erfordern unterschiedliche Behandlungen - so einfach kann man nicht tauschen. Ginge es, bräuchte man eh nur den einen der Typen...
Cheatah
Hallo Cheatah!
Gehe die beiden Listen nacheinander durch, statt in der selben Schleife. Bei der ersten addierst Du in dem Hash, bei der zweiten substrahierst Du. Ist das Element in beiden Listen vorhanden, ist das Ergebnis 0; nur in der ersten heißt 1; nur in der zweiten -1.
Das ist ne prima Idee. Genau sowas hatte ich gesucht! Werds gleich ausprobieren!
Verschiedene Datentypen erfordern unterschiedliche Behandlungen - so einfach kann man nicht tauschen. Ginge es, bräuchte man eh nur den einen der Typen...
Ok, hatte ich mir schon so ungefähr gedacht, aber ein Versuchs wars ja wert...oder? (schließlich findet manchmal auch ein blindes Huhn ein Körnchen....*grins*)
also vielen Dank! Du hast mir weiter geholfen!
grüße
Stefan
Hi,
hab mich doch zu früh gefreut, denn irgendwie bekomm ichs nicht hin.
Ich füge zuerst mit %hash = @liste; meine erste Liste in den Hash ein. Und nun komme ich nicht weiter....
Gehe die beiden Listen nacheinander durch, statt in der selben Schleife. Bei der ersten addierst Du in dem Hash, bei der zweiten substrahierst Du. Ist das Element in beiden Listen vorhanden, ist das Ergebnis 0; nur in der ersten heißt 1; nur in der zweiten -1.
Wie soll ich die zweite Liste vom Hash subtrahieren so das er als Ergebniss 0,1 oder -1 ausgibt????
wäre nett wenn du mir da nochmal kurz helfen könntest!!!
Danke Stefan
Hi,
Ich füge zuerst mit %hash = @liste; meine erste Liste in den Hash ein. Und nun komme ich nicht weiter....
warum? Der Code aus perlfaq4 macht Dir vor, was Du tun musst - nur mit zwei Arrays auf einmal statt separat (also in zwei Schleifen).
Wie soll ich die zweite Liste vom Hash subtrahieren so das er als Ergebniss 0,1 oder -1 ausgibt????
Statt mit beiden Listen $hash{$key}++ zu machen, tust Du dies nur mit der ersten. Bei der zweiten heißt es dann $hash{$key}--.
Cheatah
Hi,
Statt mit beiden Listen $hash{$key}++ zu machen, tust Du dies nur mit der ersten. Bei der zweiten heißt es dann $hash{$key}--.
Genau das war der Punkt der mir fehlte, ich stand wie immer auf der Leitung! Jetzt funktioniert es!!! Und ich hab sogar noch den Namen des Wertes der nicht in beiden Listen ist. --->also GENAU das was ich wollte!
Dir nochmals ein dickes Dankeschön!!!
viel Spaß noch...
Stefan
Hi Stefan,
Ich habe zwei Arrays bei denen ich überprüfe ob sie gleich oder verschieden sind.
wie definierst Du das genau? (Arrays sind keine Mengen, sondern Listen).
Wenn sie verschieden sind soll er mir die Elemente die verschieden sind in eine Liste speichern.
Dies scheint mir im Widerspruch zur Verwendung von Arrays zu stehen. (Oder brauchst Du als Ergebnis wiederum eine Liste, d. h. eine Ordnung der Elemente?)
Nun würde ich aber gerne noch wissen in welchem der beiden Arrays das Element vorhanden war.
Ich versuche mal, Dein Problem zu transformieren: Wenn Du wirklich Mengen meinst, dann scheinst Du an der Differenz der beiden Mengen interessiert zu sein.
Mengen lassen sich in Perl mit Hashes viel besser darstellen als mit Arrays.
Ich habs einfach mit % statt @ probiert, aber da sagt er nur "Type of arg 1 to push must be array (not hash dereference)".
Was mach ich falsch?
push() ist eine Funktion für Arrays, nicht für Hashes.
Vielleicht ist ja auch mein Ansatz vollkommen verkehrt...
Kann gut sein. Deine Problembeschreibung ist allerdings noch etwas lückenhaft, so daß ich mir nicht endgültig sicher bin.
Wenn Du wirklich Mengen meinst, dann vergiß Arrays.
Viele Grüße
Michael