in reply to How to filter the array with id of max. date.

An alternative method would be to sort the array by ascending date within group and map the result onto a hash keyed by group. This would result in the last (newest) data entry for each group overwriting any older entries in the hash. Then you can push values from the hash onto the @res list. Like this

use strict; use warnings; use Data::Dumper; our @array = ( ['ashok',15,'2006-01-01'], ['ashokpj',15,'2006-02-01'], ['ravi',56,'2006-03-01'], ['raja',56,'2006-02-01']); our %newest = ( map {($_->[1], $_)} sort { $a->[1] <=> $b->[1] || $a->[2] cmp $b->[2] } @array); our @res = (); push @res, $newest{$_} for sort {$a <=> $b} keys %newest; print Dumper(\@res);

When run produces the following

$VAR1 = [ [ 'ashokpj', 15, '2006-02-01' ], [ 'ravi', 56, '2006-03-01' ] ];

Cheers,

JohnGG

Update: Changed %sorted to %newest as the name is more meaningful.