問題 - 以下のように 2 つの配列があります。
my @arr1 = qw( jon won don pon );
my @arr2 = qw( son kon bon won kon don pon won pon don won);
@arr2 から @arr1 の最初の一致要素を削除する必要があります。つまり、上記の例では、@arr2 から win を削除する必要があります。
現在、私のロジックは以下のとおりです。
#!/usr/bin/perl
my @arr1 = qw( jon won don pon );
my @arr2 = qw( son kon bon won kon don pon won pon don won);
my @remove_indices = ();
my $remove_element;
my $first_remove_index;
OUTER_FOR: for my $i (0..@arr2) {
$outer_element = $arr2[$i];
foreach my $innr_element ( @arr1 ) {
if($innr_element eq $outer_element) {
push(@remove_indices, $i);
$first_remove_index = $i;
$remove_element = $innr_element;
last OUTER_FOR;
}
}
}
for my $i ($first_remove_index+1..@arr2) {
$outer_element = $arr2[$i];
if($remove_element eq $outer_element) {
push(@remove_indices, $i);
}
}
if (@remove_indices > 0) {
map {splice (@arr2, $_, 1)} reverse(@remove_indices);
}
print "@arr2";
しかし、それは典型的な C/C++ スタイルのロジックのようです。ハッシュは使えません。同じことをするperlの方法はありますか?