如何找到一个元素并删除所有以下元素?
How can I find an element and remove all following elements?
换句话说,我想将这个简单的 C++ 程序移植到 Perl 5:
vector<string> vec { "a", "bb", "ccc", "cd", "ee" };
// find first element starting with "cc"
auto found_it = find_if(begin(vec), end(vec),
[](auto& elem) { return elem.starts_with("cc"); });
// if found, remove all following elements
if (found_it != end(vec)) { vec.erase(found_it + 1, end(vec)); }
结果应该是("a", "bb", "ccc")
。
按索引迭代可能会有用
foreach my $i (0..$#ary) {
if ($ary[$i] =~ /^cc/) {
$#ary = $i; # shortens the array: last index is now $i
last;
}
}
语法$#arrayname
是数组最后一个元素的索引。
一种方法是使用 before_incl
from the List::MoreUtils
模块:
#!/usr/bin/env perl
use warnings;
use strict;
use feature qw/say/;
use List::MoreUtils qw/before_incl/;
my @vec = ("a", "bb", "ccc", "cd", "ee");
@vec = before_incl { /^cc/ } @vec;
say "@vec"; # a bb ccc
或者使用循环和 splice
:
的更命令的方法
my @vec = ("a", "bb", "ccc", "cd", "ee");
for (my $n = 0; $n < $#vec; $n += 1) {
if ($vec[$n] =~ /^cc/) {
splice @vec, $n + 1;
last;
}
}
问题的其他 perl 代码变体
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
my @vec = ("a", "bb", "ccc", "cd", "ee");
my $regex = qr/^cc/;
my $index = 0;
for( @vec ) {
last if /$regex/;
$index++;
}
@vec = @vec[0..$index];
say Dumper(\@vec);
换句话说,我想将这个简单的 C++ 程序移植到 Perl 5:
vector<string> vec { "a", "bb", "ccc", "cd", "ee" };
// find first element starting with "cc"
auto found_it = find_if(begin(vec), end(vec),
[](auto& elem) { return elem.starts_with("cc"); });
// if found, remove all following elements
if (found_it != end(vec)) { vec.erase(found_it + 1, end(vec)); }
结果应该是("a", "bb", "ccc")
。
按索引迭代可能会有用
foreach my $i (0..$#ary) {
if ($ary[$i] =~ /^cc/) {
$#ary = $i; # shortens the array: last index is now $i
last;
}
}
语法$#arrayname
是数组最后一个元素的索引。
一种方法是使用 before_incl
from the List::MoreUtils
模块:
#!/usr/bin/env perl
use warnings;
use strict;
use feature qw/say/;
use List::MoreUtils qw/before_incl/;
my @vec = ("a", "bb", "ccc", "cd", "ee");
@vec = before_incl { /^cc/ } @vec;
say "@vec"; # a bb ccc
或者使用循环和 splice
:
my @vec = ("a", "bb", "ccc", "cd", "ee");
for (my $n = 0; $n < $#vec; $n += 1) {
if ($vec[$n] =~ /^cc/) {
splice @vec, $n + 1;
last;
}
}
问题的其他 perl 代码变体
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
my @vec = ("a", "bb", "ccc", "cd", "ee");
my $regex = qr/^cc/;
my $index = 0;
for( @vec ) {
last if /$regex/;
$index++;
}
@vec = @vec[0..$index];
say Dumper(\@vec);