微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过数组散列中的值获取散列的键

如何解决如何通过数组散列中的值获取散列的键

下面是我使用哈希键和哈希值创建的小代码片段,它是一个数组。 我的输入是哈希值(在这种情况下为数组),我必须在 $ENV 哈希中搜索所有数组并获取哈希键

例如,如果我搜索 m3d1 ,则输出应为 TEST3

  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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?