好吧,这是解决问题的一种方法(在我理解您想要做什么的范围内)。每当您需要回答有关成员资格的问题时,您可能想要使用哈希。
use strict;
use warnings;
my @array1 = ( 11, 22, 33, 44);
my @array2 = ( 11, 2, 3, 44, 5, 44);
my @array3 = (-11, -2, -3, -44, -5, -444);
# Keep track of every value in @array1.
my %vals = map { $_ => 1 } @array1;
my @keep_indexes;
# Go through @array2, either adding the corresponding
# value in @array3 to @array1 or storing the array index.
for my $i (0 .. $#array2) {
if ($vals{$array2[$i]}){
push @array1, $array3[$i];
}
else {
push @keep_indexes, $i;
}
}
# Rebuild @array3 from the indexes that we stored.
# Change this to @array2 if you want to delete from that array instead.
@array3 = map $array3[$_], @keep_indexes;
print join(' ', @array1), "\n"; # 11 22 33 44 -11 -44 -444
print join(' ', @array2), "\n"; # 11 2 3 44 5 44
print join(' ', @array3), "\n"; # -2 -3 -5
我不喜欢那个代码,所以这里有一些警告:
- 任何时候你给变量名( 、 等)编号
@array1
,@array2
你都会陷入混乱。您需要更好的变量名,或者更有可能需要更好的数据结构。
- 每当您发现自己从事维护并行数组的业务时,您都应该考虑更好的数据结构是否会有所帮助。