Как я могу отсортировать даты в Perl?
my @dates = ( "02/11/2009" , "20/12/2001" , "21/11/2010" );
Я имею выше дат в моем массиве. Как я могу отсортировать те даты?
Мой формат даты dd/mm/YYYY
.
@dates = sort { join('', (split '/', $a)[2,1,0]) cmp join('', (split '/', $b)[2,1,0]) } @dates;
или с использованием отдельной подпрограммы сортировки:
sub mysort {
join('', (split '/', $a)[2,1,0]) cmp join('', (split '/', $b)[2,1,0]);
}
@dates = sort mysort @dates;
Обновление: более эффективным подходом является преобразование Шварца:
@dates =
map $_->[0],
sort { $a->[1] cmp $b->[1] }
map [ $_, join('', (split '/', $_)[2,1,0]) ], @dates;
Я предпочитаю формат ГГГГ / ММ / ДД
именно по этой причине. Гарантируется правильная сортировка дат между 1000/01/01
и 9999/12/31
.
my @sorted_alt = sort map { join '/', reverse split '/', $_ } @dates;
Если он вам действительно нужен в формате ДД / ММ / ГГГГ
, вы всегда можете использовать полное преобразование Шварца .
my @sorted = map {
join '/', reverse split '/', $_
}
sort
map {
join '/', reverse split '/', $_
} @dates;
или
my @sorted = map {
join '/', reverse @$_
}
sort { "@$a" cmp "@$b" }
map {
[ reverse split '/', $_ ]
} @dates;