gpt4 book ai didi

perl - 在 Perl 中,如何使用 grep 实现 map ?

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

前段时间我被问到一个“奇怪”的问题,我将如何使用 grep 实现 map。今天我试着去做,结果是这样的。我是从 Perl 中榨取了所有东西,还是有其他更聪明的技巧?

#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;

sub my_map(&@) {
grep { $_= $_[0]->($_) } @_[1..$#_];
}

my @arr = (1,2,3,4);

#list context
say (my_map sub {$_+1}, @arr);
#scalar context
say "".my_map {$_+1} @arr;
say "the array from outside: @arr";
say "builtin map:", (map {$_+1} @arr);

最佳答案

你确定他们没有问如何用map实现grep?有时这实际上很有用。

grep { STMTs; EXPR } LIST

可以写成

map { STMTs; EXPR ? $_ : () } LIST

(有一个区别:grep 返回左值,而 map 不返回。)

知道这一点,就可以压缩

map { $_ => 1 } grep { defined } @list

map { defined ? $_ => 1 : () } @list

(我更喜欢“未压缩”版本,但“压缩”版本可能会快一点。)


至于使用 grep 实现 map,您可以利用 grep 的循环和别名属性。

map { STMTs; EXPR } LIST

可以写成

my @rv;
grep { STMTs; push @rv, EXPR } LIST;
@rv

关于perl - 在 Perl 中,如何使用 grep 实现 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190597/

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