Leser: 1
![]() |
|< 1 2 3 4 >| | ![]() |
33 Einträge, 4 Seiten |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
sub hash1 { my %seen; $seen{$_}++ for ( split( //, $string ) ); my $res = join( '', sort keys %seen ); return $res; } sub hash2 { my $res = $string; my %seen; $res =~ s/(.)/$seen{$1}++ ? "" : $1/gse; return $res; } sub joinsplit1 { my $res = join '', split /(.)\1+/, join('', sort( split('', $string ))); } sub hash3 { my $res = join "", sort keys %{ { map{ $_ => 1 } split //, $string } }; } sub join_tr { my $res = join("",sort(split("",$string))); $res =~ tr/0-9a-zA-Z//s; return $res; } use Benchmark; timethese($ARGV[0] || 100, { hash1 => \&hash1, hash2 => \&hash2, hash3 => \&hash3, joinsplit1 => \&joinsplit1, join_tr => \&join_tr, });
1
2
3
4
5
6
Benchmark: timing 40000 iterations of hash1, hash2, hash3, join_tr, joinsplit1...
hash1: 1 wallclock secs ( 1.23 usr + 0.00 sys = 1.23 CPU) @ 32520.33/s (n=40000)
hash2: 1 wallclock secs ( 1.11 usr + 0.00 sys = 1.11 CPU) @ 36036.04/s (n=40000)
hash3: 2 wallclock secs ( 1.55 usr + 0.00 sys = 1.55 CPU) @ 25806.45/s (n=40000)
join_tr: 1 wallclock secs ( 0.73 usr + 0.00 sys = 0.73 CPU) @ 54794.52/s (n=40000)
joinsplit1: 1 wallclock secs ( 0.94 usr + 0.00 sys = 0.94 CPU) @ 42553.19/s (n=40000)
1 2 3 4 5 6
sub arr2 { my $res = $string; my @seen; $res =~ s/(.)/$seen[ord($1)]++ ? "" : $1/gse; return $res; }
1 2 3 4 5 6 7
sub substr_tr { my $res=$string; my $out="\0"x256; $res =~ s/(.)/substr($out,ord($1),1,$1)/eg; $out =~ tr/\0//d; return $out; }
1 2 3 4 5 6
sub regex2 { $_=$string; my $out=""; $out.=$1 while ( m/(.)(?!.*\1)/g ); return $out; }
nepos+2008-03-12 18:15:04--Man kann sich auch malList::MoreUtils ansehen. Da gibts auch eine uniq() Funktion, neben vielen anderen nützlichen Sachen.
1 2 3
@liste = qw(bla tata uhha lala tata uhha tata uhha bla uhha); @neu = grep { ! $hash{$_}++} @liste; print "@neu\n", %hash, "\n";
1 2 3 4 5 6 7 8 9 10 11 12
my @neu = filter_liste(); sub filter_liste{ my @neu; for( @liste ){ # wenn Ausdruck wahr, dann schiebe das Element in das Array; if( ! $hash{$_}++ ){ push @neu, $_; } } return @neu; }
1 2 3 4 5 6
use Data::Dumper; my %hash; my @liste = qw(bla tata uhha tata); for( @liste ){ print Dumper \%hash; $hash{$_}++}; print Dumper \%hash;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$VAR1 = {};
$VAR1 = {
'bla' => 1
};
$VAR1 = {
'tata' => 1,
'bla' => 1
};
$VAR1 = {
'uhha' => 1,
'tata' => 1,
'bla' => 1
};
$VAR1 = {
'uhha' => 1,
'tata' => 2,
'bla' => 1
};
Array+2008-03-14 15:30:21--Eine Frage hätte ich noch: Wenn ein beliebiger Befehl nur TRUE oder FALSE zurückliefert, liefert er doch bei TRUE eine 1 zurück. Bei FALSE aber doch keine 0 sondern einen Leerstring, oder?
Man kann aber nicht sagen, dass undefined, 0 und ein Leerstring dasselbe wären, obwohl alle falsch sind? Da habe ich noch ein paar Verständigungsschwierigkeiten.
C:\>perl -e "print 'yes' if( 0E0 );
1
2
3
4
5
6
7
8
C:\>perl -MO=Concise,-exec -e "print !2"
1 <0> enter
2 <;> nextstate(main 1 -e:1) v
3 <0> pushmark s
4 <$> const[SPECIAL sv_no] s
5 <@> print vK
6 <@> leave[1 ref] vKP/REFC
-e syntax OK
1
2
3
4
5
6
7
8
C:\>perl -MO=Concise,-exec -e "print !0"
1 <0> enter
2 <;> nextstate(main 1 -e:1) v
3 <0> pushmark s
4 <$> const[SPECIAL sv_yes] s
5 <@> print vK
6 <@> leave[1 ref] vKP/REFC
-e syntax OK
Array+2008-03-14 15:30:21--[...]
Ebenso war ich blöderweise der Meinung nur der Schlüssel würde inkrementiert werden, aber wie soll man z. Bsp. 'tata' inkrementieren?? :-)
QuoteJetzt werde ich auch in Zukunft mehr den Befehl Data::Dumper benutzen, um in die Strukturen schauen zu können!
![]() |
|< 1 2 3 4 >| | ![]() |
33 Einträge, 4 Seiten |