Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Ordenar array por fecha

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Vie Oct 03, 2008 6:17 pm
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 246
Ubicación: Colombia
Ordenar array por fecha Responder citando

Lo que deseo es ordenar esta lista por orden cronológico de menor a mayor

los datos los tengo de esta forma

Perl:
$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";


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

Perl:
$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";


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
Mensaje Sab Oct 04, 2008 10:20 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

La transformada de Schwartz está bien para estos casos...

Perl:
        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__
Mensaje Mie Oct 08, 2008 10:29 am
salva
Perlero Nuevo
Perlero Nuevo
Registrado: 03 Ene 2008
Mensajes: 14
Responder citando

Para ese formato de datos en concreto, donde la fecha aparece al final como DD||MM||YYYY puedes hacerlo así:

Perl:
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, '';
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group