• Publicidad

Problema ordenar array

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema ordenar array

Notapor Gorka345 » 2009-02-27 12:39 @569

¿Cómo puedo ordenar el array de Perl siguiente ...

Código: Seleccionar todo
15    120    B
10    15      A
15    110       D
110  7000    C
110  6000   I
111  6001   H


... de forma que me quede ordenado primero por la columna 1 y luego por la columna 2, es decir, ...

Código: Seleccionar todo
10    15      A
15    110       D
15    120    B
110  6000   I
110  7000    C
111  6001   H


? Gracias.
Gorka345
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2009-02-27 12:34 @565

Publicidad

Notapor explorer » 2009-02-27 13:33 @606

Bienvenido a los foros de Perl en Español, Gorka345.

Con un sort() se puede hacer bien...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my $arreglo = <<EOT;
15    120    B
10    15      A
15    110       D
110  7000    C
110  6000   I
111  6001   H
EOT


## Lectura
my @arreglo;
for (split "\n", $arreglo) {
    push @arreglo, [ split ];
}

use Data::Dumper;
print Dumper \@arreglo;

## Ordenación
@arreglo
    = sort {
        $a->[0] <=> $b->[0]
                ||
        $a->[1] <=> $b->[1]
      }
      @arreglo
    ;

print Dumper \@arreglo;

__END__
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Después del proceso de lectura del $arreglo, que transformamos en una estructura bidimensional en @arreglo, hacemos un sort(), indicando las condiciones de ordenación, según tus instrucciones: primero se ordenan por la primera columna o (||), si son iguales, por la segunda.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 44 invitados