Как я могу отсортировать даты в Perl? - PullRequest
7 голосов
/ 22 марта 2010

Как мне отсортировать даты в Perl?

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

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

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

Ответы [ 4 ]

18 голосов
/ 22 марта 2010
@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;
3 голосов
/ 22 марта 2010

Я предпочитаю формат YYYY/MM/DD лучше, именно по этой причине.Гарантируется правильная сортировка дат между 1000/01/01 и 9999/12/31.

my @sorted_alt = sort map { join '/', reverse split '/', $_  } @dates;

Если вам действительно нужно это в формате DD/MM/YYYY, вы всегда можете пойти на полное преобразование Шварца .

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;
1 голос
/ 08 октября 2016

Многие люди здесь правильно утверждали, что исходный формат дат должен быть в формате гггг-мм-дд, но никто не дал код Perl, который может обработать этот случай. Итак, вот оно:

my @dates = (
    '2014-08-15',
    '2016-09-13',
    '2001-01-02',
    '1998-09-22',
    '1998-09-21',
    '1998-09-23',
    '1999-04-20',
    '2020-01-30',
);

@dates = sort {$a cmp $b} @dates;   # 1998 is the first date's year
@dates = sort {$b cmp $a} @dates;   # 2014 is the first date's year
1 голос
/ 04 февраля 2013

Или используйте формат эпохи в метке времени и сортируйте их как числа. Затем преобразуйте выходные строки даты, как вы хотите. Тогда вы не застряли в форматировании исходных строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...