gpt4 book ai didi

perl - 我可以将这个 Perl 组合到一个单独的 map-grep 链中吗?

转载 作者:行者123 更新时间:2023-12-04 02:40:49 26 4
gpt4 key购买 nike

我可以将这个 Perl 组合到一个单独的 map-grep 链中吗?一个小声音说我应该可以,但我不知道怎么做!

# expand sponsor keys in to a list of sponsor objects.
foreach my $event (@events) {
next unless exists $event->{sponsors} && ! ref $event->{sponsors};
$event->{sponsors} =
[ map { $lookup{$_} }
grep { exists $lookup{$_} }
split( /\s*,\s*/, $event->{sponsors} ) ];
}

最佳答案

我是(可读)map-grep 链的忠实粉丝。尽管如此 虽然我知道map 越来越能更好地处理在 void 上下文中的使用,我不喜欢使用映射 在空上下文中。除此之外,我更喜欢哈希切片而不是 grepping 一些东西数组。前提是lookup的值不是undef,grep所有的从散列切片中定义的值应该和 grep 一样工作存在的那些,然后将它们转换为查找值。

所以我提供了这个 map 解决方案:

map { 
$_->{sponsors}
= [ grep {; defined } @lookup{ split( /\s*,\s*/, $_->{sponsors} ) } ]
;
}
grep { $_->{sponsors} && !ref $_->{sponsors} } @events
;

这里使用 map 的问题在于,您不是根据另一个项目创建一个列表。您正在更新一个列表。

就我的喜好而言,您也可以轻松地执行 do-foreach:

 do { 
$_->{sponsors}
= [ grep {; defined } @lookup{ split( /\s*,\s*/, $_->{sponsors} ) } ]
;
}
foreach { $_->{sponsors} && !ref $_->{sponsors} } @events
;

但这与您原来的并没有什么不同。您可以轻松地将 foreach 放在顶部。但是那么你有一个循环,我对那里的 next 也没有问题。我认为最大的收获是使用散列切片而不是 grepping 并映射到相同的值。

关于perl - 我可以将这个 Perl 组合到一个单独的 map-grep 链中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19984350/

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