我有4个成员的哈希,比方说,
%hash =
(
xxx => 8,
yyy => 3,
zzz => 2,
aaa => 2,
)
但是,这里我们只知道“8,3,2,2”,即该哈希中的值,如何获取并存储特定值“3”的键名? (没有任何哈希反转,因为反转不会返回重复元素)
答案 0 :(得分: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} // []}