Doppelte listenelemente entfernen
flame
- perl
hallo, ich kriege das nicht hin, der zeigt mir immernoch doppelte elemente an. Bitte helft mir. Ich bin ein Anfänger.
hier ist mein Code
use IO;
$unordnung='.\test.txt';
$ordnung='.\ordnung.txt';
open (IN,"<$unordnung");
open (OUT,">$ordnung");
OUT->autoflush(1);
@werte=<IN>;
$t=0;
while (@werte)
{
print $t;
print "Doppelt sind: @werte[$t]\n";
chomp;
splice @werte,0, $t;
$t++;
}
close IN;
close OUT;
hi,
hallo, ich kriege das nicht hin, der zeigt mir immernoch doppelte elemente an. Bitte helft mir. Ich bin ein Anfänger.
guck mal http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.7.1.3
beschreibt wie über einen hash die duplikate rausfliegen.
Viele Grüße, Rolf
hey, super danke, ich werde es gleich mal ausprobieren. wenn es nichzt klappt melde ich mich nochmal.
Es hat geklappt, vielen Dank! Jetzt muss ich nur noch verstehen was da passiert. ;-)
mfg Flame
hi,
Es hat geklappt, vielen Dank! Jetzt muss ich nur noch verstehen was da passiert. ;-)
Danke fürs Danke ;-)
Wie's geht? Ganz einfach: in einem hash gibt es keine doppelten Keys - und das ist der Trick.
@ar = qw(emil wolle wolle emil erwin erwin rolf rolf otto otto ulla otto);
for (@ar){ $uni{$_} = 1 };
Jedes Listenelement wird als Key mit Value=1 auf einen hash gelesen und da es nur einen Key mit gleichem Wert geben darf in einem hash fliegen die Duplikate raus (tatsächlich werden die Values überschrieben).
%uni = map{$_,1}@ar; # Tipp von Wingi
Und irgendie geht das noch einfacher, perldoc...
print join "\n", sort keys %uni;
Zur Übung:
Erstelle dein Array mal neu ohne Duplikate (array leer machen oder neu definieren, Schleife bauen oder mit map - trau dich).
Viele Grüße, Rolf
oder einfacher:
%uni = map{$_,1}@ar; # Tipp von Wingi
oder noch einfacher mit einem sogenannten slice:
my @ar = qw(emil wolle wolle emil erwin erwin rolf rolf otto otto ulla otto);
my %test;
@test{@ar} = ();
@ar = keys %test;
use Data::Dumper;
print Dumper @ar;
Struppi.
hi Struppi,
jow, ich erinnere mich ...
oder noch einfacher mit einem sogenannten slice:
Array mit duplikaten
my @ar = qw(emil wolle wolle emil erwin erwin rolf rolf otto otto ulla otto);
my %test;
@test{@ar} = ();@ar = keys %test;
use Data::Dumper;
print Dumper @ar;
Struppi.
Coole Mucke die rockt ;-)
Viele Grüße, Rolf
PS: Muss auch mal wieder perldoc lesen...