gpt4 book ai didi

perl - 我可以在通过拆分有条件地插入哈希时避免字符串复制吗?

转载 作者:行者123 更新时间:2023-12-04 18:19:16 25 4
gpt4 key购买 nike

我正在 build %grouped来自 %uniq_c , 其中 %grouped包含通过拆分 %uniq_c 生成的键/值对的 key IF %uniq_c的值(value)足够高。它相当有效,但我想做得更好。

%uniq_c = (
'foo:baz' => 3,
'foo:quux' => 12,
'bar:corge' => 15,
'bar:fred' => 8,
);

foreach my $gv (keys %uniq_c) {
if( $uniq_c{$gv} >= 10 ) {
my ($g, $v) = split /:/, $gv, 2;
push( @{$grouped{$g}}, $v );
}
}

我认为每次循环迭代都会发生三个字符串副本; 1 代表 $g,2 代表 $v。有没有办法消除一个 $v 副本,或者更好的是,一个 $v 和一个 $g 副本(可能是某种字符串切片)?

作为引用,Data::Dump::dump(%grouped) 产生以下内容:
(
"bar", ["corge"],
"foo", ["quux"],
)

最佳答案

split 返回的值的复制效率很高;字符串缓冲区被盗而不是被复制。但是当你推 $v 时,还有另一个副本完成。 .所有这三个副本都可以通过混叠来避免。

use Data::Alias qw( alias );

foreach my $gv (keys %uniq_c) {
if( $uniq_c{$gv} >= 10 ) {
alias my ($g, $v) = split /:/, $gv, 2;
alias push @{$grouped{$g}}, $v;
}
}

关于perl - 我可以在通过拆分有条件地插入哈希时避免字符串复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11021929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com