Zeichenkette um jedes zweite Zeichen verkuerzen
Lude
- perl
Hi,
gegeben ist eine Zeichenkette der Laenge 'n'. Aus dieser entfernt werden soll jedes zweite Zeichen, beginnend mit dem ersten. - Wie geht's am performatesten?
Gruss,
Lude
Halihallo Lude
gegeben ist eine Zeichenkette der Laenge 'n'. Aus dieser entfernt werden soll jedes zweite Zeichen, beginnend mit dem ersten. - Wie geht's am performatesten?
Hm. Da Perl per se aufgrund der Architektur (4GL Language mit VM)
langsamer ist, als äquivalente C-Programme, könnte ich mir
vorstellen, dass ein möglichst C Backend am schnellsten ist. Die
per standard mitgelieferte Möglichkeit bietet hierbei die
RegularExpression Engine:
my $t = '.....'; # langer String
$t =~ s/(.)(.)/$1/g;
print $t;
oder
my $t = '.....';
print join('', split(/(.)./,$t));
ansonsten könnte ich mir noch etwas per grep/map vorstellen, was
aber IMHO langsamer sein wird. Das IMHO langsamste wäre eine
for/while-Schleife mit einem Modulo-Test auf die Schleifenvariable,
oder allgemein: die Verwendung von substr().
Viele Grüsse
Philipp
Halihallo Lude
Ich vergass: teste einfach einige Varianten mittels
perldoc Benchmark
Viele Grüsse
Philipp
Hallo Philipp,
hm, da hast du ja auch schon gepostet ;)
$t =~ s/(.)(.)/$1/g;
Durch die zweite Backref wird der Ausdruck unnötig langsamer.
Grüße,
CK
Halihallo Christian
hm, da hast du ja auch schon gepostet ;)
Deine Lösung ist korrekter ;)
$t =~ s/(.)(.)/$1/g;
Durch die zweite Backref wird der Ausdruck unnötig langsamer.
Richtig, genau das kommt eben von dem drei-Minuten-weniger-lang-
Nachdenken ;)
Viele Grüsse
Philipp
Hallo Lude,
gegeben ist eine Zeichenkette der Laenge 'n'. Aus dieser entfernt
werden soll jedes zweite Zeichen, beginnend mit dem ersten. - Wie geht's
am performatesten?
my $x = "ab" x 100;
$x =~ s/(.)./$1/g;
Grüße,
CK
hi CK,
gegeben ist eine Zeichenkette der Laenge 'n'. Aus dieser entfernt
werden soll jedes zweite Zeichen, beginnend mit dem ersten. - Wie geht's
am performatesten?my $x = "ab" x 100;
$x =~ s/(.)./$1/g;
Coole Mucke!
Gruss, Erwin