doppelte Werte in Array
Kurt
- perl
hallo
ich habe ein Array zB @Liste=(1,2,1,4,1,2);
wie kann ich nun die doppelten Einträge aus der Liste entfernen??
thx im Vorraus
Kurt
hallo
ich habe ein Array zB @Liste=(1,2,1,4,1,2);
wie kann ich nun die doppelten Einträge aus der Liste entfernen??
Du kennst HASHEs?
Du kennst die Perl FAQ auf deinem Rechner?
OK, ich lese vor:
perlfaq4 - Data Manipulation
How can I remove duplicate elements from a list or array?
There are several possible ways, depending on whether the array is ordered and whether you wish to preserve the ordering.
a) If @in is sorted, and you want @out to be sorted: (this assumes all true values in the array)
$prev = 'nonesuch';
@out = grep($_ ne $prev && ($prev = $_), @in);
This is nice in that it doesn't use much extra memory, simulating uniq(1)'s behavior of removing only adjacent duplicates. It's less nice in that it won't work with false values like undef, 0, or '';
0 but true'' is OK, though.
b) If you don't know whether @in is sorted:
undef %saw;
@out = grep(!$saw{$_}++, @in);
c) Like (b), but @in contains only small integers:
@out = grep(!$saw[$_]++, @in);
d) A way to do (b) without any loops or greps:
undef %saw;
@saw{@in} = ();
@out = sort keys %saw; # remove sort if undesired
e) Like (d), but @in contains only small positive integers:
undef @ary;
@ary[@in] = @in;
@out = grep {defined} @ary;
But perhaps you should have been using a hash all along, eh?
hi,
machs über einen hash
@a = qw(1 1 1 3 3 3 4 4 4 );
%h = undef;
%h = map{ $_,1 }@a;
foreach $key(sort keys %h){ print "$key\n"}
Rolf