in reply to Testing if an array contains a value and then deleting it in most efficient way
- Use a hash.
- @array = grep $_ != $value, @array;
- Or a fairly efficient method:
for my $i ( 0 .. $#array ) {
if ( $array[ $i ] == $value ) {
@array[ $i, -1 ] = @array[ -1, $i ];
$#array--;
last;
}
}
- Update: after my naive attempt at efficiency and some benchmarking this works better:
my $i
for ( @array ) {
if ( $_ == $value ) {
$i = $_;
last;
}
}
splice @array, $i, 1;