Perl中使用grep通过哈希值匹配查找对应键名问题求助
问题原因
- 你原先的代码直接遍历哈希的
values,拿到的是数组引用,直接和$country_value做字符串匹配必然不成立 - 标量上下文下
grep返回的是匹配成功的次数,所以你才会得到输出0 - 另外数值比较应该用
==而不是字符串比较的eq,避免隐式转换带来的异常问题
修复后的代码
#!/usr/bin/perl -w use strict; use warnings; my $country_value = 1; my $country = { 'IN' => [ 1, 5 ], 'US' => [ 2, 6 ], 'UK' => [ 3, 7 ] }; # 遍历哈希的所有键,检查对应数组中是否包含目标值 my ($country_code) = grep { my $values = $country->{$_}; grep { $_ == $country_value } @$values; } keys %$country; print $country_code // '未找到匹配的国家代码'; print "\n";
代码说明
- 改为遍历哈希的键
keys %$country,拿到每个国家代码后再取出对应的数组 - 内层嵌套
grep遍历该数组,判断是否存在和$country_value相等的元素 - 用列表上下文接收
grep的返回结果,拿到第一个匹配的键名 - 用
//做未匹配的兜底处理,避免未匹配时打印空值的问题
内容的提问来源于stack exchange,提问作者SaAsh Techs
相关产品推荐
相关产品推荐

