perl – 如何测试哈希中是否存在值?

前端之家收集整理的这篇文章主要介绍了perl – 如何测试哈希中是否存在值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
让我们说我有这个
#!/usr/bin/perl

%x = ('a' => 1,'b' => 2,'c' => 3);

我想知道值2是否是%x中的哈希值.

怎么做?

解决方法

从根本上说,散列是为解决相反的问题而优化的数据结构,知道密钥2是否存在.但是,在不知情的情况下很难判断,所以让我们假设不会改变.

这里提出的可能性将取决于:

>您需要多久进行一次
>哈希的动态如何

一次性

> grep $_ == 2,值%x(也被拼写为grep {$_ == 1}值%x)将返回与哈希存在的一样多的2的列表,或者在标量上下文中火柴.在一个条件下作为布尔值评估,它只会产生你想要的.
grep可以记录Perl的版本.
>使用List :: Util qw(first);第一个{$_ == 2}值%x只返回第一个匹配,undef如果没有.这使得它更快,因为它会在成功后立即短路(停止检查元素).这不是2的问题,但请注意,返回的元素不一定要求为boolean true.在这些情况下使用定义.
自08年以来,List::Util是Perl内核的一部分.
>使用List :: MoreUtils qw(any);任何{$_ == 2}值%x完全返回您作为布尔值请求的信息,并表现出短路行为.
List::MoreUtils可从CPAN获得.
> 2 ~~ [values%x]完全返回您作为布尔值请求的信息,并表现出短路行为.
Smart matching自5.10以来在Perl中可用.

重复的op,静态哈希

构造一个将值映射到键的哈希值,并将该值作为自然哈希来测试密钥存在.

my %r = reverse %x;
if ( exists $r{2} ) { ... }

重复操作,动态哈希

使用如上所述的反向查询.您需要保持最新状态,作为读者/编辑者的练习. (提示:价值碰撞是棘手的)

猜你在找的Perl相关文章