使用其值从perl哈希中获取密钥名

使用其值从perl哈希中获取密钥名,perl,Perl,我有4个成员,比如说 %hash = ( xxx => 8, yyy => 3, zzz => 2, aaa => 2, ) 但是,这里我们只知道“8,3,2,2”,即散列中的值,我如何获取并存储值“3”的键名?(没有任何哈希反转,因为反转不会返回重复的元素)通过检查每个键值对的目标值 @target_keys = grep { $hash{$_} eq $target_value } keys %hash; 如果您打算经常这样做,那么“反转”散列是有意

我有4个成员,比如说

%hash = 
( 

xxx => 8,

yyy => 3,

zzz => 2,

aaa => 2,

)

但是,这里我们只知道“8,3,2,2”,即散列中的值,我如何获取并存储值“3”的键名?(没有任何哈希反转,因为反转不会返回重复的元素)

通过检查每个键值对的目标值

@target_keys = grep { $hash{$_} eq $target_value } keys %hash;
如果您打算经常这样做,那么“反转”散列是有意义的,但是在反转的散列中,使用列表引用作为散列值,这样您就可以跟踪原始散列中的多个键何时引用相同的值

my %reverse_hash = ();
while (my ($k,$v) = each %hash) {
    push @{$reverse_hash}{$v}, $k;
}

...

@target_keys = @{$reverse_hash{$target_value} // []}

通过检查每个键值对的目标值

@target_keys = grep { $hash{$_} eq $target_value } keys %hash;
如果您打算经常这样做,那么“反转”散列是有意义的,但是在反转的散列中,使用列表引用作为散列值,这样您就可以跟踪原始散列中的多个键何时引用相同的值

my %reverse_hash = ();
while (my ($k,$v) = each %hash) {
    push @{$reverse_hash}{$v}, $k;
}

...

@target_keys = @{$reverse_hash{$target_value} // []}

所以我们不回顾你已经做了什么,到目前为止你尝试了什么?我只是先根据值对哈希进行排序,然后将其反转。因此,它更改为,8=>xxx,3=>yyy,2=>aaa,由于反转(尝试映射-结果相同),它省略了zzz,然后通过访问键“3”来提取其值以找到值(这是我们要提取的原始键),用您尝试过但不起作用的代码更新您的问题。请注意,
{}
是一个散列引用,
()
用于创建散列。是的,让我们将特定的键值对存储在新的散列中@Melpomenits是一个hash引用@steviebSo我们不回顾你已经做了什么,到目前为止你尝试了什么?我只是先根据值对hash进行排序,然后将其反转。因此,它更改为,8=>xxx,3=>yyy,2=>aaa,由于反转(尝试映射-结果相同),它省略了zzz,然后通过访问键“3”来提取其值以找到值(这是我们要提取的原始键),用您尝试过但不起作用的代码更新您的问题。请注意,
{}
是一个散列引用,
()
用于创建散列。是的,让我们将特定的键值对存储在新的散列中@Melpomenits是hash reference@steviebAnd,grep工作正常,谢谢!但,即使两个或多个键具有相同的值,我们是否有任何精确的方法使用其值获取任何一个键?比如$key={hash{$}eq$target{u value}键%hash
($one\u of_the_target\u keys)=grep{$hash{$\u}eq$target\u val}keys%hash
更好:
使用列表::Util qw(第一);my$key=first{hash{$}eq$target\u val}keys%hash
。这将在第一个键处停止,而不是查找所有键,然后只使用第一个键。@RameshAravindM:您需要在问题中更新此项。而且,grep工作正常,谢谢!但,即使两个或多个键具有相同的值,我们是否有任何精确的方法使用其值获取任何一个键?比如$key={hash{$}eq$target{u value}键%hash
($one\u of_the_target\u keys)=grep{$hash{$\u}eq$target\u val}keys%hash
更好:
使用列表::Util qw(第一);my$key=first{hash{$}eq$target\u val}keys%hash
。这将在第一个键处停止,而不是查找所有键,然后仅使用第一个键。@RameshAravindM:请在问题中更新此项。