首页 > 解决方案 > perl中哈希内的数组

问题描述

我如何对哈希值进行排序并将它们计算为相关键。

例如:推送@{$name_hash{$st_name}},$end_name;

 $VAR1 = 'firstname')';
    $VAR2 = [
      'lastname1',
      'lastname1',
      'lastname1',
      'lastname2',
      'lastname2',
      'lastname2',
      'lastname3',
      'lastname3',
       ] 

我需要像这样的桌子

    `firstname : lastname1 : 3`  

    `firstname : lastname2 : 3`

    `firstname : lastname3 : 2`

我尝试使用一些计数器,但它要么在我只有多次值的开始时失败,要么在最后一个值的末尾(在本例中为 lastname3)失败。

foreach $n (sort keys %name_hash) {
    $ecounter =0; $temp2 = "NA"; $tcount =0; $p =0;
    foreach $lastn (sort values @{$name_hash{$n}}) {
        $ecounter ++ if ($lastn eq $temp2);
        $tcount++;
        if (($tcount) > ($ecounter+1) ){
        print " $n : $temp2 : $ecounter+1\n";
        $ecounter=0; $tcount=1;
        $p =1 ;
        }
        $temp2 = $lastn ;

       }

    print "$n : $temp2 : $ecounter+1\n" if (!$p);

    }

标签: perl

解决方案


使用哈希计算重复的名称:

#!/usr/bin/perl
use warnings;
use strict;

my %name_hash = (
    firstname => [qw[
        lastname1 lastname1 lastname1
        lastname2 lastname2 lastname2
        lastname3 lastname3 ]]);

for my $first_name (sort keys %name_hash) {
    my %count;
    ++$count{$_} for @{ $name_hash{$first_name} };
    print "$first_name : $_ : $count{$_}\n" for sort keys %count;
}

推荐阅读