【问题标题】:Perl - count by client# loopPerl - 按客户端计数#循环
【发布时间】:2012-05-23 23:19:58
【问题描述】:

我有以下子程序可以计算每个客户的购买次数。它曾经只有/总是 4 个类别,下面的脚本就足够了。

客户名单:

  • alpha01
  • alpha02
  • alpha03
  • alpha04
  • bravo01
  • bravo02
  • bravo03
  • bravo04

由于列表已经增加到 >4,我需要帮助来修改脚本。 我希望脚本灵活。脚本可以继续循环运行,直到找到最后/最大的可用数字(只是一个想法),而不是将“MYClientNo”固定为某个数字/值,然后它才会停止并返回该值。

例如,“alpha”可以达到 06,“bravo”可以达到 22。但我预计它不会很快超过 100。有人可以帮忙吗?

sub GetCountMyClient {
    my @Line1 = @_;
    my @Count = (0, 0, 0, 0);
    foreach $myclient (@Line1) {
        my @MYClient       = split(/\s+/, $myclient);
        my @MYClientOutput = split(/:/, $MYClient[4]);
        #print $MYClientOutput[0]. "\n";
        my $MYClientNo     = substr($MYClientOutput[0], -2);
        #print $MYClientNo . "\n";
        if($MYClientNo eq "01") {
            $Count[0]+= 1;
        } elsif($MYClientNo eq "02") {
            $Count[1]+= 1;
        } elsif($MYClientNo eq "03") {
            $Count[2]+= 1;
        } elsif($MYClientNo eq "04") {
            $Count[3]+= 1;
        }
    }
    return @Count;
}

PS:我尽力识别代码,它在文本框中看起来正确,但在预览中不正确。

【问题讨论】:

    标签: perl


    【解决方案1】:

    使用散列 (%count),其中散列键是客户端编号,散列值是计数。或者,您可以使用带有客户编号的数组作为数组索引。

    sub GetCountMyClient {
        my @Line1 = @_;
        my %count;
    
        foreach $myclient (@Line1) {
            my @MYClient       = split(/\s+/, $myclient);
            my @MYClientOutput = split(/:/, $MYClient[4]);
            #print $MYClientOutput[0]. "\n";
            my $MYClientNo     = substr($MYClientOutput[0], -2);
            #print $MYClientNo . "\n";
            $count{$MYClientNo}++;
        }
        return %count;
    }
    

    【讨论】:

      【解决方案2】:

      您可能会发现 count_by 来自 List::UtilsBy 在这里对您有所帮助。

      use List::UtilsBy qw( count_by );
      
      my %count = count_by { $_ =~ m/(\d+)$/ } @client_names;
      

      假设@client_names 数组仅包含客户端的名称,这将返回一个哈希值,计算每种数字字符串的结尾数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-26
        • 2021-04-16
        • 1970-01-01
        • 2012-05-15
        • 2021-01-04
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        相关资源
        最近更新 更多