可以检测多个密钥的哈希值?

时间:2012-11-02 16:38:24

标签: perl

我正在以哈希的散列形式收集数据,看起来像

$VAR1 = {
          '502' => {
                     'user2' => '0'
                   },
          '501' => {
                     'git' => '0',
                     'fffff' => '755'
                   },
          '19197' => {
                       'user4' => '755'
                     }
        };

问题出在501。可能不会出现两个键。有可能发现这个吗?

更新 修正了哈希的拼写错误。

3 个答案:

答案 0 :(得分:4)

如果您只想在主哈希的每个键下存储一个键值对,为什么不使用2元素数组呢?这样,您可以在创建每个新插入之前检查是否存在,而无需检查哈希的大小或知道其键是什么。我建议的结构是:

$VAR1 = {
    '502' => [ 'user2', '0' ],
    '501' => [ 'git', '0' ],
    '19197' => [ 'user4', '755' ]
}

答案 1 :(得分:3)

假设您的hashref名为 $ var

my @bad = grep { scalar keys %{$var->{$_}} > 1 } keys %$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 :(得分:2)

keys(%{$VAR1{'501'}}) == 2其余的将是一个。

此外,该键的语法错误,但我认为这是一个错字。