perl - 如何比较嵌套哈希
问题描述
我正在尝试比较哈希中的数据以找出差异。我的哈希:
$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 的用户在每台服务器上是否具有相同的状态和年龄值。我应该把它分成三个独立的哈希吗?
感谢所有建议!
解决方案
这是一个示例,您可以如何比较子哈希中给定用户的值。假设您的哈希被称为$info
:
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;
}
推荐阅读
- r - 在 R 中,展开一个表,将内部区分的行分开
- python - Python中分布的卡方检验
- c++ - Octave-C++-API 和 Boost 单元测试导致分段错误
- python - 如何在整个 CNN 训练集上运行 PCA?
- php - 阻止使用 iframe url 加入 BigBlueButton 会议
- elasticsearch - Elasticsearch 中的参数化自定义脚本相似性
- android - 如果 Android 中的 textinput 值为空,则 React Native Textinput 退格键不会触发
- wordpress - 中继器字段不工作且不在 jetforms 中显示数据
- php - 在 laravel 中复制图像和文本
- knockout.js - 淘汰赛fn。检测集合的功能已解决