ssh*_*rma 1 perl hash key duplicates
嗨,我是新来的perl和初学者阶段请帮助我有哈希
%hash = { a => 2 , b=>6, a=>4, f=>2, b=>1, a=>1}
Run Code Online (Sandbox Code Playgroud)
我希望输出为
应该是一个新的哈希
%newhash = { a => 7, b=>7,f =>2}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
要计算我正在做的哈希键的频率
foreach $element(sort keys %hash) {
my $count = grep /$element/, sort keys %hash;
print "$element comes in $count times \n";
}
Run Code Online (Sandbox Code Playgroud)
但通过这样做我得到的输出为:
a comes 1 times
b comes 1 times
a comes 1 times
f comes 1 times
b comes 1 times
a comes 1 times
Run Code Online (Sandbox Code Playgroud)
这不是我想要的.
如何获得重复键的正确频率数?如何添加这些重复键的值并存储在新哈希中?
根据定义,哈希不能多次使用相同的哈希键.您可能希望将初始数据存储在不同的数据结构中,例如二维数组:
use strict;
use warnings;
use Data::Dumper;
my @data = ( [ a => 2 ],
[ b => 6 ],
[ a => 4 ],
[ f => 2 ],
[ b => 1 ],
[ a => 1 ],
);
my %results;
for my $value (@data) {
$results{$value->[0]} += $value->[1];
}
print Dumper %results;
# $VAR1 = 'a';
# $VAR2 = 7;
# $VAR3 = 'b';
# $VAR4 = 7;
# $VAR5 = 'f';
# $VAR6 = 2;
Run Code Online (Sandbox Code Playgroud)
那说,其他错误的事情:
%hash = { a => 2 , b=>6, a=>4, f=>2, b=>1, a=>1}
Run Code Online (Sandbox Code Playgroud)
你不能这样做,它将hashref({})分配给一个哈希.要么使用%hash = ( ... )或$hashref = { ... }.