arrays – Perl:删除数组项并调整数组大小
发布时间:2020-12-16 06:19:41 所属栏目:大数据 来源:网络整理
导读:我正在尝试使用Perl中的另一个数组来过滤一个术语数组.我在OS X上有Perl 5.18.2,但如果我使用5.010,行为是相同的.这是我的基本设置: #!/usr/bin/perl#use strict;my @terms = ('alpha','beta test','gamma','delta quadrant','epsilon','zeta','eta','theta
我正在尝试使用Perl中的另一个数组来过滤一个术语数组.我在OS X上有Perl 5.18.2,但如果我使用5.010,行为是相同的.这是我的基本设置:
#!/usr/bin/perl #use strict; my @terms = ('alpha','beta test','gamma','delta quadrant','epsilon','zeta','eta','theta chi','one iota','kappa'); my @filters = ('beta','iota'); foreach $filter (@filters) { for my $ind (0 .. $#terms) { if (grep { /$filter/ } $terms[$ind]) { splice @terms,$ind,1; } } } 这样可以拉出与各种搜索项匹配的行,但数组长度不会改变.如果我写出结果的@terms数组,我得到: [alpha] [delta quadrant] [zeta] [eta] [theta chi] [kappa] [] [] [] [] 正如您所期望的那样,打印标量(@terms)得到10的结果. 我想要的是一个长度为6的结果数组,最后没有四个空白项.我如何得到这个结果?为什么阵列不会缩小,因为perldoc page about (我对Perl不是很流利,所以如果你在想“你为什么不……?”,几乎可以肯定是因为我听说不知道或不理解它它.) 解决方法
您可以随时重新生成数组,减去您不想要的内容. grep充当过滤器,允许您决定您想要哪些元素以及哪些元素不需要:
#!/usr/bin/perl use strict; my @terms = ('alpha','iota'); my %filter_exclusion = map { $_ => 1 } @filters; my @filtered = grep { !$filter_exclusion{$_} } @terms; print join(',',@filtered) . "n"; 如果你手头有一个像%filter_exclusion这样的简单结构,这很容易. 更新:如果要允许任意子字符串匹配: my $filter_exclusion = join '|',map quotemeta,@filters; my @filtered = grep { !/$filter_exclusion/ } @terms; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |