gpt4 book ai didi

regex - 从 map 中检索散列键

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

有一些带单词的字符串,用空格分隔。我需要在每个单词中获得一个包含特定子字符串的单词数组,这些单词应该是唯一的。可以这样做,例如这样的方式:

%arr = map { $_ => 1 } grep /foo/, $str=~/\b(\w+)\b/g;
@arr = keys %arr;

但这是单行的,为了简洁起见,我尝试这样做:

@arr = keys map { $_ => 1 } grep /foo/, $str=~/\b(\w+)\b/g;

但是我得到了错误(在 Perl 5.24.1 中):

Experimental keys on scalar is now forbidden

不幸的是12帖子并没有帮助我理解应该如何正确完成。

最佳答案

你忘了实际创建一个散列!

my @arr = keys %{ +{ map { $_ => 1 } grep /foo/, $str =~ /\b(\w+)\b/g } };

但是有一种更好的方法来去除重复项。

my %seen;
my @arr = grep !$seen{$_}++, grep /foo/, $str =~ /\b(\w+)\b/g;

sub uniq { my %seen; grep !$seen{$_}++, @_ }

my @arr = uniq grep /foo/, $str =~ /\b(\w+)\b/g;

use List::Util qw( uniq );

my @arr = uniq grep /foo/, $str =~ /\b(\w+)\b/g;

顺便说一下,

grep /foo/, $str =~ /\b(\w+)\b/g

可以简化为

$str =~ /\b\w*foo\w*+/g

关于regex - 从 map 中检索散列键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52823508/

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