gpt4 book ai didi

perl - 使用map提取匹配指定值的(key, value)哈希集

转载 作者:行者123 更新时间:2023-12-04 13:09:59 25 4
gpt4 key购买 nike

我一直在寻找一种使用 perl 函数执行以下操作的方法 map :
给定一个散列,我想提取值等于或匹配指定参数的对(键,值)。

在我的示例中,我想提取 (key, value) 对,其中 value = failed ,但它也可以是一个表达式(即以 A 开头的字符串,或一个 REGEX)。这就是为什么我想要一个散列,而不仅仅是一个匹配值的键表。

my %strings = (
bla => "success",
ble => "failed",
bli => "failed",
foo => "success",
blo => "failed",
bar => "failed",
blu => "success"
);

my %failed_s = ();

while (my ($k, $v) = each %strings) {
if ( $v eq 'failed' ) {$failed_s{$k} = $v};
};

我尝试了几种方法来做到这一点,但没有很好的结果,所以我想我对引用资料、做作、结果等感到困惑。
my %failed_s = 
map { { $_ => $strings{$_} }
if ( $strings{$_}./failed/ ) }
keys %strings;
my %failed_s =
map { ( $strings{$_} eq 'failed') &&
($_, $strings{$_}) }
keys %strings;

print "Dumper \%failed_s: \n" . Dumper(\%failed_s);

在这种情况下,使用 map 可能是不可能的或无效的,但它会帮助我(可能还有其他人)知道原因。

最佳答案

Perl 可以轻松访问散列逻辑,以至于很少有人能够将键值对概念与其最常见的实现:散列区分开来。

因此,当大多数 Perler 想到 KVP 时,他们会想到“哈希”。但是想想 Perl 数组是 1) 列表、2) 队列和 3) 堆栈的方式,你会发现实现并不完全等同于概念。

我看到需要以散列之外的方式处理对,所以我创建了自己的库,我打算将其上传到 CPAN,直到我找到 List::Pairwise 已经在那了。

(当然好像没有我的“hash拼接”方法...)

无论如何,使用 List::Pairwise ,你只需

use List::Pairwise qw<grepp>;
my %failed_s = grepp { $b eq 'failed' } %strings;

当我说“看看这有多简洁!”时,我感觉自己像个电视广告人。

关于perl - 使用map提取匹配指定值的(key, value)哈希集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5597542/

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