Perl 是否可能检测具有多个密钥的哈希?
我正在收集散列中的数据,看起来像Perl 是否可能检测具有多个密钥的哈希?,perl,Perl,我正在收集散列中的数据,看起来像 $VAR1 = { '502' => { 'user2' => '0' }, '501' => { 'git' => '0', 'fffff' => '755' }, '19
$VAR1 = {
'502' => {
'user2' => '0'
},
'501' => {
'git' => '0',
'fffff' => '755'
},
'19197' => {
'user4' => '755'
}
};
问题出在501
中。可能不会出现两个键。有可能检测到这一点吗
更新
修复了散列中的键入错误。键(%{$VAR1{'501'})==2
,其余为1
另外,该键上存在语法错误,但我认为这是一个输入错误。假设上面的hashref名为$var: 结果是一个哈希键数组,其中包含多个hashref。使用上述数据:
# perl test.pl
$VAR1 = {
'501' => {
'git' => '0',
'fffff' => '755'
},
'502' => {
'user2' => '0'
},
'19197' => {
'user4' => '755'
}
};
$VAR1 = '501';
然后,您可以通过以下方式访问检测为坏的每个元素:
foreach my $key ( @bad ) {
# do something to or with $var->{$key}
}
如果您只打算在主散列的每个键下存储一个键值对,为什么不使用2元素数组呢?这样,您就可以在进行每个新插入之前检查是否存在,而无需检查哈希的大小或知道其键是什么。我提议的结构是:
$VAR1 = {
'502' => [ 'user2', '0' ],
'501' => [ 'git', '0' ],
'19197' => [ 'user4', '755' ]
}
似乎您应该能够执行类似于
foreach VAR1 as k,v(如果count(v){echo'k is duplicate'}
。但是我不知道这方面的perl语法。是否要将嵌套哈希(git,fffff)存储为键“501”的值?您应该仍然有键
,因此它是键(%{$VAR1{501'}})==2
这是一个非常优雅的设计解决方案。我下次会这么做!谢谢=)
$VAR1 = {
'502' => [ 'user2', '0' ],
'501' => [ 'git', '0' ],
'19197' => [ 'user4', '755' ]
}