Как я могу сортировать метки времени в Perl? - PullRequest
3 голосов
/ 21 марта 2010

У меня есть несколько тысяч объектов со строковым свойством в формате "yyyy-MM-ddTHH:mm:ssZ".Я хочу отсортировать эти объекты по времени.

Есть ли какие-нибудь полезные пакеты или сценарии для этого?

(В настоящее время я просто сравниваю отдельные числовые значения, и кажется, что это не очень эффективно и аккуратно.)

Ответы [ 4 ]

7 голосов
/ 21 марта 2010

sort без функции сортировки сортирует в лексикографическом порядке. Он удовлетворяет ваши потребности.

@sorted = sort @timestamps;
5 голосов
/ 21 марта 2010

Временные метки в этом формате могут быть отсортированы лексикографически, поэтому достаточно обычного perl «sort» и функции сравнения строк «cmp».

3 голосов
/ 21 марта 2010

Вы можете использовать Time :: Local для преобразования вашей даты в метку времени или один из модулей Date :: из cpan.Вы можете взглянуть на this , чтобы увидеть, что доступно.

Также обратите внимание, что с указанным выше форматом сортировка объектов лексикографически также поможет (даже если, вероятно, несколько медленнее, чем сравнение чисел)., но первоначальное преобразование имеет свою стоимость).

Будьте осторожны, если вы используете даты со всего мира, потому что вы можете столкнуться с проблемами сортировки с часовым поясом и переходом на летнее время.Если все даты и времени находятся в одном и том же месте, все должно быть в порядке.

0 голосов
/ 21 марта 2010

Если ваш строковый формат жесткий, вы можете использовать следующую подпрограмму для сортировки списка дат.

sub timeSort {

    my ($time) = ( shift =~ /\d{2}:\d{2}:\d{2}/ );
    return $time;
}

my @sortedList = sort { timeSort($a) <=> timeSort($b) } @oldList;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...