Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11256[/thread]

Vereinigungsmenge mit Arrays



<< >> 7 Einträge, 1 Seite
roli
 2008-02-06 16:52
#105646 #105646
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe zwei Arrays die jeweils nur numerische Werte enthalten (koennen). Gibt es eine elegantere Loesung die Vereinigungsmenge
Code: (dl )
A vereinigt mit B (oder: Die Vereinigung von A und B) ist die Menge aller Elemente, die in A oder in B enthalten sind. Das „oder“ ist hier nicht-ausschließend zu verstehen.

(jedoch mit exclusivem oder!), als ueber die Array's zu itterieren, und dann mittels if zu pruefen ob das jeweilige Element schon in mein "Vereinigungsarray" eingefügt wurde?

Danke
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
Strat
 2008-02-06 17:05
#105647 #105647
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Meinst du sowas wie:
Code (perl): (dl )
1
2
my %checkHash = ();
my @uniq = grep { not $seen{$_}++ } ( @array1, @array2 );


siehe auch: List::Utils
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
roli
 2008-02-06 17:23
#105651 #105651
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Jepp, das ist's.
Wozu aber der Hash?
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
Linuxer
 2008-02-06 18:30
#105652 #105652
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
das " not $seen{$_}++" liefert für den jeweils ersten Eintrag eines Elements ein TRUE an das grep, so dass das entsprechende Element weitergereicht werden kann.
Für jeden weiteren Eintrag kommt beim grep ein FALSE an, sodass das Element nicht mehr weitergereicht wird.

Dafür braucht's den Hash ;o)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Gast Gast
 2008-02-06 19:56
#105655 #105655
Tippfehler: %checkHash ist gleich %seen
Mit strict und warnings würde ein Fehler ausgeworfen (%seen nicht initialisiert) und eine Warnung (%checkHash taucht nur einmal auf)
Linuxer
 2008-02-06 20:10
#105658 #105658
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Kann ja vorkommen; ich denke, %seen ist in der perlfaq öfters benutzt und hat sich vielleicht mehr oder weniger unbewusst festgesetzt.

Beim drüber nachgrübeln fiel mir noch ein: Die originale Frage ist ja eine FAQ:

perldoc -q duplicate
Quote
Question: How can I remove duplicate elements from a list or array?
Answer:
...
You can write this more briefly using a grep, which does the same thing.

my %seen = ();
my @unique = grep { ! $seen{ $_ }++ } @array;


perldoc -q duplicate

edit: Grammatikfehler korrigiert :edit
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
roli
 2008-02-07 10:28
#105674 #105674
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Hi,

stimmt, das ist letztenendes meine Frage, nur wenn man sie anders formuliert (Mengenlehre), dann findet man's einfach nicht ;-}
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
<< >> 7 Einträge, 1 Seite



View all threads created 2008-02-06 16:52.