Thread teil einer zeichenkette verwenden - wie? (7 answers)
Opened by Gast at 2007-04-21 14:50

betterworld
 2007-04-21 17:41
#76114 #76114
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=pq,21.04.2007, 15:31][quote=renee,21.04.2007, 14:26]Split dürfte aber schneller sein als die RegEx...[/quote]
wieso das?[/quote]
Das wuesste ich auch gerne.  Man muss beachten, dass split ja auch einen regulaeren Ausdruck benutzt.

Ich habe es mal gebenchmarkt:
Code (perl): (dl )
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
use strict;
use warnings;
use Benchmark qw(cmpthese);

my $klein = 'alpha - beta';

cmpthese (0, {
        m_klein => sub {
            my ($part) = $klein =~ m/^([^-]*)/;
        },
        split_klein => sub {
            my ($part) = split /-/,$klein,2;
        },
    });

my $gross = 'alpha - ' . 'beta' x 10000;

cmpthese (0, {
        m_gross => sub {
            my ($part) = $gross =~ m/^([^-]*)/;
        },
        split_gross => sub {
            my ($part) = split /-/,$gross,2;
        },
    });

Ergebnis:
Code: (dl )
1
2
3
4
5
6
                Rate     m_klein split_klein
m_klein     656550/s          --        -21%
split_klein 834204/s         27%          --
              Rate split_gross     m_gross
split_gross 38948/s          --        -53%
m_gross     82317/s        111%          --

Offenbar ist split bei kleinen Strings tatsaechlich etwas schneller (was man vielleicht durch Optimieren meines Regexes beheben kann), aber bei grossen Strings schneidet split weitaus schlechter ab.  Das lieght imho daran, dass der lange zweite Teil des Strings sinnlos durch die Gegend kopiert werden muss.

View full thread teil einer zeichenkette verwenden - wie?