如何比较嵌套哈希

时间:2019-05-16 11:07:24

标签: perl hash

我正在尝试比较哈希中的数据,以便发现差异。 我的哈希值:

$VAR1 = {
10.200.40.10 => {
                5678903  => { 
                                'status' => 'ACTIVE',
                                'age'    => '20'
                            }
                8234234  => {
                                'status' => 'NOT ACTIVE',
                                'age'    => '23'
                            }
                }        
10.200.40.11 => {        
                5678903  => { 
                                'status' => 'NOT ACTIVE',
                                'age'    => '20'
                            }
                8234234  => {
                                'status' => 'NOT ACTIVE',
                                'age'    => '23'
                            }
                }        
10.200.40.12 => {        
                5678903  => { 
                                'status' => 'NOT ACTIVE',
                                'age'    => '21'
                            }
                8234234  => {
                                'status' => 'ACTIVE',
                                'age'    => '23'
                            }
                }
}

我想检查同一用户(例如ID为5678903的用户)在每台服务器上是否具有相同的状态和年龄值。我应该将其划分为三个单独的散列吗?

感谢所有建议!

1 个答案:

答案 0 :(得分:1)

这里是一个示例,您可以在子哈希中比较给定用户的值。假设您的哈希称为use List::Util qw(uniq); my $info = { ... }; # Set up the hash here my $user = "5678903"; my $status = get_user_value( $info, 'status', $user ); my $age = get_user_value( $info, 'age', $user ); if ( ((uniq @$status) == 1) && ((uniq @$age) == 1) ) { say "Same status and age"; } else { say "Not same status and age"; } sub get_user_value { my ( $info, $key, $user ) = @_; my @values; for my $server (keys %$info) { if (exists $info->{$server}{$user}) { push @values, $info->{$server}{$user}{$key} if exists $info->{$server}{$user}{$key}; } } return \@values; }

index.js