Ann*_*nna 4 perl list perl-module partition
是否有一个类似于grep的函数,可以将列表分为与表达式匹配的部分(如grep所做的那样)及其补集?
当然,编写这样的函数非常简单,但我有兴趣知道它是否已经存在并且可以更方便地包含在任何List::Util类似的模块中。
我在发布问题后立即浏览 List::MoreUtils 找到了答案(抱歉)。它的一部分:
根据BLOCK的返回值对LIST进行分区,BLOCK的返回值表示当前值被放入哪个分区。返回由此创建的分区的列表。创建的每个分区都是对数组的引用。
my $i = 0;
my @part = part { $i++ % 2 } "a".."h"; # Returns [qw( a c e g )], [qw( b d f h )]
Run Code Online (Sandbox Code Playgroud)
如果您所处的环境不允许您安装模块,那么这里有一个List::MoreUtils::part不依赖于任何内容的版本:
#!/usr/bin/env perl
use warnings;
use strict;
use feature qw/say/;
sub part(&@) {
my $f = shift;
my @parts;
for (@_) {
my $bucket = $f->();
push @{$parts[$bucket]}, $_;
}
return @parts;
}
my ($evens, $odds) = part { $_ % 2 } 1..10;
say "Even numbers: @$evens";
say " Odd numbers: @$odds";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |