gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:30:52 25 4
gpt4 key购买 nike

假设我有这个

#!/usr/bin/perl

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

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

这是怎么做的?

最佳答案

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

此处介绍的可能性将取决于:

  • 您需要多久做一次
  • 散列的动态性如何

  • 一次性操作
  • grep $_==2, values %x (也拼写为 grep {$_==1} values %x )将返回与哈希中存在的 2 一样多的列表,或者在标量上下文中,匹配的数量。在条件中评估为 bool 值,它会产生您想要的结果。
    grep 适用于我内存中最古老的 Perl 版本。
  • use List::Util qw(first); first {$_==2} values %x仅返回第一个匹配项,undef如果没有。这使它更快,因为它一旦成功就会短路(停止检查元素)。这对 2 来说不是问题,但要注意返回的元素不一定评估为 bool 值 true。使用 defined在这些情况下。
    List::Util 从 5.8 开始是 Perl 核心的一部分。
  • use List::MoreUtils qw(any); any {$_==2} values %x准确返回您作为 bool 值请求的信息,并表现出短路行为。
    List::MoreUtils 可从 CPAN 获得。
  • 2 ~~ [values %x]准确返回您作为 bool 值请求的信息,并表现出短路行为。
    Smart matching从 5.10 开始在 Perl 中可用。

  • 重复操作,静态哈希

    构造一个将值映射到键的散列,并将其用作自然散列来测试键是否存在。
    my %r = reverse %x;
    if ( exists $r{2} ) { ... }

    重复操作,动态散列

    使用如上所述的反向查找。您需要使其保持最新状态,这留给读者/编辑作为练习。 (提示:值冲突很棘手)

    关于perl - 如何测试哈希中是否存在值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4697075/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com