展开全部
事实上你这样做是没有意义的。如果存在该键,你就不是添加新的,只能改变原键值。所以只需要判断该键是否存在。
你如果有这种需求,大概是需要用二级哈希
(!exists($a{$key1}->{$key2})) and ($a{$key1}->{$key2} = $value);
更多追问追答
追问
谢谢!你说的有道理,我的需求可能也没有表达清楚。
比如我现在有个表格:
ID 时间
001 11:10
001 12:13
002 10:12
002 12:34
002 12:28
……
然后我要关注的就是哪个‘小时’出现的次数最多,但比如ID002有两个12点的,那这时就只能算一次,不同ID的小时是累计的(不知道我说清楚了没有……)
追答
抱歉没看清你的需求,重新回答一下。仔细看了一下,我感觉你还是使用一个二级哈希作为判断,另用一个哈希作为值求和。判断是否存在就看二级哈希是否存在(if (!exists $hash{$k1}{$k2}))或者直接看值也是一样的(if (!$hash{$k1}{$k2}))。对你这的数值完整示例程序如下:
use strict;
my %checkhash;
my %sumhash;
open FILE,"a";
foreach my $line (<FILE>) {
chop($line);
my ($id, $time) = split(/ +/, $line);
my ($hour,$min) = split(/:/, $time);
if (!exists $checkhash{$hour}{$id}) {
$checkhash{$hour}{$id} = 1;
$sumhash{$hour}++;
}
}
close FILE;
foreach my $k (sort { $sumhash{$a} <=> $sumhash{$b} } keys %sumhash) {
my $v = $sumhash{$k};
print "[$k][$v]\n";
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询