perl6:数组;摆脱空槽(任何)

时间:2018-05-28 17:47:20

标签: arrays perl6

对于只包含Str元素的数组,我可以使用grep(Str)来消除a:delete之后的空插槽;

例如:

my @prov_cd = <AB BC MB NB NL NS ON PE QC SK>;

@prov_cd[2]:delete;                              # Manitoba deleted

@prov_cd;                                        # [AB BC (Any) NB NL NS ON PE QC SK]

my @prov_cd_cleanup = @prov_cd.grep(Str);        # get rid of (Any) empty slot: [AB BC NB NL NS ON PE QC SK]

@prov_cd = @prov_cd_cleanup;                     # [AB BC NB NL NS ON PE QC SK]

Array可以包含各种对象类型;我宁愿“grep”所有不是(Any)的东西。

我该怎么做?

谢谢。

3 个答案:

答案 0 :(得分:5)

这样做:

@prov_cd.grep(*.defined) (AB BC NB NL NS ON PE QC SK)

或者,您可以查看splice

答案 1 :(得分:5)

首先请注意,如果您通过splice而不是:delete删除条目,那么这些项目将被移动,并且没有“漏洞”。将会生成。

现在,如果您真的想要过滤掉Any,可以通过

进行过滤
@prov_cd.grep(* !=== Any)

但是,我怀疑你正在寻找

@prov_cd.grep(*.defined)

答案 2 :(得分:2)

为了回应上述观点并提供一个示例,您可以使用final List<Integer> goodIds = orders.stream().flatMap(o -> o.getGoodsList().stream()).map(Good::getId) .collect(Collectors.toList()); ,它也会返回值&#34;拼接&#34;如果需要的话。

splice

请注意my @prov_cd = <AB BC MB NB NL NS ON PE QC SK>; # Starting from index 2, remove the next 1 items my $removed = @prov_cd.splice(2, 1); say @prov_cd; # OUTPUT: [AB BC NB NL NS ON PE QC SK] say $removed; # OUTPUT: [MB] 始终返回一个数组,即使您只删除了一个项目。

splice