gpt4 book ai didi

perl - 确定 Perl 哈希大小时的内存/性能权衡

转载 作者:行者123 更新时间:2023-12-04 17:34:13 25 4
gpt4 key购买 nike

我正在浏览 GitHub 上一个流行存储库中的一些 Perl 代码。并使用此方法来计算散列的大小:

while ( my ($a, undef ) = each %h ) { $num++; }


我想为什么当代码可以更简单地编写为
$num = scalar keys %h;

因此,我将这两种方法与 Benchmark 进行了比较。
my %h = (1 .. 1000);
cmpthese(-10, {
keys => sub {
my $num = 0;
$num = scalar keys %h;
},
whileloop => sub {
my $num = 0;
while ( my ($a, undef ) = each %h ) {
$num++;
}
},
});

结果
评价 whileloop 键
whileloop 5090/s -- -100%
键 7234884/s 142047% --

结果表明,使用 keys比while循环快得多。我的问题是:为什么原来的编码器会使用这么慢的方法?有什么我想念的吗?另外,有没有更快的方法?

最佳答案

我无法读懂可能编写那段代码的人的想法,但他/她可能认为:

my $n = keys %hash;

比使用 each 遍历所有内容使用更多内存.

请注意,赋值左侧的标量创建了标量上下文:不需要 scalar除非您想在本来是列表上下文的内容中创建标量上下文。

关于perl - 确定 Perl 哈希大小时的内存/性能权衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28800284/

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