我想转换ABCDEF为A,B,C,D,E,F
使用Perl最快的方法是什么?
我有很多字符串要转换,字符串最长可达32768字节.所以,我想降低字符串转换的开销.
怎么样
$string =~ s/.\K(?=.)/,/g; # using \K keep escape
$string =~ s/(?<=.)(?=.)/,/g; # pure lookaround assertion
Run Code Online (Sandbox Code Playgroud)
要么
$string = join ",", split(//, $string);
Run Code Online (Sandbox Code Playgroud)
要找到最快的解决方案,请使用Benchmark.
额外信用:
这是我尝试的基准测试的结果.令人惊讶的是,\K逃逸比纯粹的外观快得多,这与分裂/连接的速度差不多.
use strict;
use warnings;
use Benchmark qw(cmpthese);
my $string = "ABCDEF" x 1000;
cmpthese(-1, {
keep => 'my $s = $string; $s =~ s/.\K(?=.)/,/g',
lookaround => 'my $s = $string; $s =~ s/(?<=.)(?=.)/,/g',
splitjoin => 'my $s = $string; $s = join ",", split(//, $string)'
});
Run Code Online (Sandbox Code Playgroud)
输出:
Rate splitjoin lookaround keep
splitjoin 6546367/s -- -6% -47%
lookaround 6985568/s 7% -- -44%
keep 12392841/s 89% 77% --
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |