Thread Eindeutige Liste aller Zeichen im String (32 answers)
Opened by roli at 2008-03-11 18:39

KurtZ
 2008-03-13 04:24
#106993 #106993
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
sub arr2 { 
    my $res = $string;
    my @seen;
    $res =~ s/(.)/$seen[ord($1)]++ ? "" : $1/gse;
    return $res;
}


Arrays sind schneller als Hashes, immerhin Platz 1 im Ranking bei laaaangen Strings.

Code (perl): (dl )
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;
}


nur (sub)String, auch nicht schneller

Code (perl): (dl )
1
2
3
4
5
sub regex {
        my $res=$string;
        $res =~ s/(.)(?=.*\1)//g;
        return $res;
}


erstaunlich langsam bei langen Strings, linearer Aufwand macht sich bemerkbar....dafür aber echt knapp hingeschrieben.

RegEx Fanatiker können da bestimmt noch tunen...

grübel ... auch nicht schneller:
Code (perl): (dl )
1
2
3
4
5
6
sub regex2 {
        $_=$string;
        my $out="";
        $out.=$1 while ( m/(.)(?!.*\1)/g );
        return $out;
}
TMTOWTDYOG (there's more than one way to dig your own grave)

View full thread Eindeutige Liste aller Zeichen im String