加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Perl列表中找到值的数量?

发布时间:2020-12-15 21:51:53 所属栏目:大数据 来源:网络整理
导读:列表中的值的数量只能通过迭代其值或将其转换为数组来确定.将其分配给标量不会返回项目计数: my $n = ('a','b','c'); # $n = 'c' 有一个“空括号”成语,可以用来获取元素的数量: my $n = () = ('a','c'); # $n = 3 它在内部是等同的 my $n = @{[ 'a','c' ]
列表中的值的数量只能通过迭代其值或将其转换为数组来确定.将其分配给标量不会返回项目计数:
my $n = ('a','b','c');  # $n = 'c'

有一个“空括号”成语,可以用来获取元素的数量:

my $n = () = ('a','c'); # $n = 3

它在内部是等同的

my $n = @{[ 'a','c' ]};

解决方法

这是一个有趣的实现细节:对空列表的赋值是否会创建(不必要的)匿名数组?

有两种方法可以回答这个问题:第一,正确的方法:尝试弄清楚如何在源中处理这个问题.是否有一个特殊情况可以分配给在标量上下文中评估的空列表?

作为懒惰和无知的类型,我选择使用Benchmark:

#!/usr/bin/perl

use strict; use warnings;
use Benchmark qw( cmpthese );

cmpthese -5,{
    goatse => sub { my $n = () = 'A' .. 'Z' },anon   => sub { my $n = @{[ 'A' .. 'Z' ]}},};

我经常运行基准测试,并且在所有情况下,对空列表的分配都略有优势.如果差异纯粹是随机的,那么观察10个有利于goatse的时间的概率小于0.1%,所以我假设存在某种短路.

另一方面,正如运行评论中发布的基准@daotoad,可能会给出更完整的图片:

#!/usr/bin/perl

use strict; use warnings;
use Benchmark qw( cmpthese );

use constant START => 1;
use constant STOP => 1000;

my $start = START;
my $stop = STOP;

cmpthese -5,{
    anon => sub { my $n = @{[ $start .. $stop ]}},goatse => sub { my $n = () = $start .. $stop },canon => sub { my $n = @{[ START .. STOP ]}},cgoatse => sub { my $n = () = START .. STOP },};

我机器上的典型结果(Windows XP Pro SP3,Core 2 Duo,2 Gb内存,ActiveState perl 5.10.1.1006):

           Rate    anon cgoatse  goatse   canon
anon     5207/s      --    -45%    -49%    -51%
cgoatse  9522/s     83%      --     -7%    -10%
goatse  10201/s     96%      7%      --     -4%
canon   10636/s    104%     12%      4%      --

与:

use constant START => 'AAAA';
use constant STOP => 'ZZZZ';

结果是:

          Rate    anon  goatse cgoatse   canon
anon    1.73/s      --    -12%    -16%    -17%
goatse  1.98/s     14%      --     -4%     -5%
cgoatse 2.06/s     19%      4%      --     -1%
canon   2.08/s     20%      5%      1%      --

结论:

如果有疑问,请使用我的$n =()= …;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读