Comment puis-je trier les dates de Perl? J'ai des dates ci-dessus dans mon tableau. Comment puis-je trier ces dates? p> mon format de date est jj / mm / aaaa code>. p> p>
4 Réponses :
@dates =
map $_->[0],
sort { $a->[1] cmp $b->[1] }
map [ $_, join('', (split '/', $_)[2,1,0]) ], @dates;
Faites cela avec une transformation schwartzienne ou une autre clé de clé en cache, vous n'avez donc pas à recompagner les valeurs à chaque fois.
@brian: merci, j'ai oublié ça :-)
Et si vos dates ont des horaires par ex. 29/4 / 2021-00: 10: 10 Vous pouvez scinder / ou - utiliser [\ / \-] et joindre des champs en arrière à l'aide de [2,1,0,3]. IE trier {joindre ('', (divisé '[\ / \ -]', $ a) [2,1,0,3]) joindre ("", (divisé "[\ / \ -] ', $ b) [2,1,0,3])} code>
Je préfère le format Si vous en avez vraiment besoin Dans ou p> aaaaa / mm / dd dd> mieux, pour cette raison. Il est garanti de trier les dates correctement, entre 1000/01/01 code> et 9999/12/31 code>. Format DD / MM / AAAA CODE>, vous pouvez toujours choisir une complète Transformer Schwartzian a>. p>
ou utilisez le format EPOCH dans l'horodatage et les triez comme des chiffres. Ensuite, convertissez la sortie des chaînes de date comme vous le souhaitez. Ensuite, vous n'êtes pas coincé avec le formatage des chaînes d'origine. P>
Serait utile si vous avez montré comment faire cela. Pouvez-vous ajouter un exemple?
Beaucoup de gens ici ont fait valoir correctement que le format original des dates doit être au format AAAA-MM-DD, mais personne n'a donné au code PERL pouvant gérer ce cas encore. Alors, voici:
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
La réponse de Brad Gilbert contient du code pour cette affaire. C'est juste @dates = trier @dates; code>.
Ah, bon point - mais j'aime mon exemple parce que cela fonctionne réellement sur une gamme de valeurs correctes (aucune magie de carte fragmentaire), il affiche les deux commandes en expliquant l'explication ascendante par rapport à la descente et n'inspire inutilement les valeurs triées.
Stockage des dates comme
aaaa / mm / dd code> est beaucoup plus facile. Vous pouvez faire ce que vous voulez quand vous les affichez.