如何过滤匹配时如何通过数组grep?

Jua*_*rro 5 arrays perl

是否有一种快速简便的方法来查找数组,找到满足某些测试的元素从原始数组中删除它们?

比如我想

@a = (1, 7, 6, 3, 8, 4);
@b = grep_filter { $_ > 5 } @a;

# now @b = (7, 6, 8)
# and @a = (1, 3, 4)
Run Code Online (Sandbox Code Playgroud)

换句话说,我想将一个数组拆分成两个数组:匹配的数组和不符合某个条件的数组.

dax*_*xim 9

知道你的图书馆,芒.

use List::MoreUtils qw(part);
part { $_>5 } (1, 7, 6, 3, 8, 4)
Run Code Online (Sandbox Code Playgroud)

回报

(
    [1, 3, 4],
    [7, 6, 8],
)
Run Code Online (Sandbox Code Playgroud)


Eug*_*ash 8

my @a = (1, 7, 6, 3, 8, 4);
my (@b, @c);    

push @{ $_ > 5 ? \@b : \@c }, $_ for @a;
Run Code Online (Sandbox Code Playgroud)