Как я могу отсортировать даты в Perl?

Как я могу отсортировать даты в Perl?

my @dates =  ( "02/11/2009" , "20/12/2001" , "21/11/2010" ); 

Я имею выше дат в моем массиве. Как я могу отсортировать те даты?

Мой формат даты dd/mm/YYYY.

7
задан brian d foy 22 March 2010 в 15:30
поделиться

2 ответа

@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;
18
ответ дан 6 December 2019 в 07:50
поделиться

Я предпочитаю формат ГГГГ / ММ / ДД именно по этой причине. Гарантируется правильная сортировка дат между 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;
3
ответ дан 6 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: