Página 1 de 1

Ordenar array por fecha

NotaPublicado: 2008-10-03 19:17 @845
por danimera
Lo que deseo es ordenar esta lista por orden cronológico de menor a mayor

los datos los tengo de esta forma

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$foto[1] = "2||valle.jpg||tumb_valle.jpg||categoria||19||09||2008";
$foto[2] = "2||valle.jpg||tumb_valle.jpg||categoria||17||09||2008";
$foto[3] = "2||valle.jpg||tumb_valle.jpg||categoria||18||09||2008";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


la idea es organizar de alguna forma para que me quede algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$foto[1] = "2||valle.jpg||tumb_valle.jpg||categoria||17||09||2008";
$foto[2] = "2||valle.jpg||tumb_valle.jpg||categoria||18||09||2008";
$foto[3] = "2||valle.jpg||tumb_valle.jpg||categoria||19||09||2008";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Probé unas cosas tan horribles que me da pena mostrar... pero ya mi solución estaba tomando muchas líneas y bueno... Me gustaría saber de qué forma puedo hacer eso más rápido. Gracias

NotaPublicado: 2008-10-04 11:20 @513
por explorer
La transformada de Schwartz está bien para estos casos...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        1 #!/usr/bin/perl
        2 use strict;
        3 use warnings;
        4 use diagnostics;
        5
        6 my @foto = qw(
        7     2||valle.jpg||tumb_valle.jpg||categoria||19||09||2008
        8     2||valle.jpg||tumb_valle.jpg||categoria||17||09||2007
        9     2||valle.jpg||tumb_valle.jpg||categoria||17||11||2008
       10     2||valle.jpg||tumb_valle.jpg||categoria||18||09||2008
       11 );
       12
       13 print join "\n", @foto,'','';
       14
       15 @foto
       16     = map  { $_->[3] }
       17       sort {
       18           $a->[2] <=> $b->[2]
       19                   ||
       20           $a->[1] <=> $b->[1]
       21                   ||
       22           $a->[0] <=> $b->[0]
       23       }
       24       map { [ (split/\|\|/)[4..6], $_ ] }
       25       @foto
       26     ;
       27
       28 print join "\n", @foto, '';
       29
       30 __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2008-10-08 11:29 @520
por salva
Para ese formato de datos en concreto, donde la fecha aparece al final como DD||MM||YYYY puedes hacerlo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @foto = qw( 2||valle.jpg||tumb_valle.jpg||categoria||19||09||2008
               2||valle.jpg||tumb_valle.jpg||categoria||17||09||2007
               2||valle.jpg||tumb_valle.jpg||categoria||17||11||2008
               2||valle.jpg||tumb_valle.jpg||categoria||18||09||2008
             );

@foto = map join('|', reverse split /\|/),
        sort
        map join('|', reverse split /\|/), @foto;

print join "\n", @foto, '';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4