我是从 构建%grouped
的%uniq_c
,其中%grouped
包含通过拆分%uniq_c
的 key IF%uniq_c
的值足够高生成的键/值对。它相当有效,但我想做得更好。
%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"],
)