如何解决如何通过数组散列中的值获取散列的键
下面是我使用哈希键和哈希值创建的小代码片段,它是一个数组。 我的输入是哈希值(在这种情况下为数组),我必须在 $ENV 哈希中搜索所有数组并获取哈希键
use strict;
use warnings;
use Data::Dumper;
my %ENV;
$ENV{"TEST3"}=["m3d1","m3d2"] ;
$ENV{"TEST4"}=["m4d1","m4d2"] ;
$ENV{"TEST5"}=["m5d1","m5d2"] ;
$ENV{"TEST6"}=["m6d1","m6d2"] ;
print Dumper \@keys;
print Dumper \@values;
有没有可能,或者有更好的设计吗?
解决方法
当然有可能。我们可以访问数据结构中的每个值,直到找到匹配的值。
您没有说明字符串代表什么,我将称 TEST3
为一组,而我将称 m3d1
为主机。以下代码段不假设主机仅预设在一组中。
my @groups;
for my $group (keys(%ENV)) {
for my $host (@{ $ENV{$group} }) {
if ($host eq $target_host) {
push @groups,$group;
}
}
}
die("Not found\n") if !@groups;
say for @groups;
但这效率不高。如果您打算进行多次查找,这会很慢。
让我们先把结构翻过来。
my %groups_by_host;
for my $group (keys(%ENV)) {
for my $host (@{ $ENV{$group} }) {
push @{ $groups_by_host{$host} },$group;
}
}
以上产生
my %groups_by_host = (
m3d1 => [ "TEST3" ],m3d2 => [ "TEST3" ],m4d1 => [ "TEST4" ],m4d2 => [ "TEST4" ],m5d1 => [ "TEST5" ],m5d2 => [ "TEST5" ],m6d1 => [ "TEST6" ],m6d2 => [ "TEST6" ],);
然后,搜索变得即时。
my $groups = $groups_by_host{$target_host}
or die("Not found\n");
say for @$groups;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。