加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 22:01:41 所属栏目:大数据 来源:网络整理
导读:让我们说我有这个 #!/usr/bin/perl%x = ('a' = 1,'b' = 2,'c' = 3); 我想知道值2是否是%x中的哈希值. 怎么做? 解决方法 从根本上说,散列是为解决相反的问题而优化的数据结构,知道密钥2是否存在.但是,在不知情的情况下很难判断,所以让我们假设不会改变. 这
让我们说我有这个
#!/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} ) { ... }

重复操作,动态哈希

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读