• Publicidad

Problema eliminar la última ocurrencia de un 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 eliminar la última ocurrencia de un array

Notapor gorkalinux » 2009-06-15 10:37 @484

En este caso el array 'vector' contiene:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push (@vector,"6\tRoma");
push (@vector,"3\tParis");
push (@vector,"5\tMadrid");
push (@vector,"7\tYork");
push (@vector,"9\tYork");
push (@vector,"2\tRoma");
push (@vector,"4\tParis");
push (@vector,"1\tRoma");
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Y yo quiero eliminar para cada ciudad, la de mayor valor, es decir, que al final vector tenga:

Código: Seleccionar todo
"3\tParis"
"7\tYork"
"2\tRoma"
"1\tRoma"


¿Cómo puedo hacerlo? Gracias.
gorkalinux
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2009-04-14 02:23 @141

Publicidad

Notapor explorer » 2009-06-15 11:12 @508

Podrías hacer lo siguiente: (una de muchas)

Pasas la información a un diccionario, siendo las claves el nombre de la ciudad. Y los valores, una referencia a un arreglo que almacena los números de cada ciudad.

Luego, por cada ciudad, ordenas los arreglos de mayor a menor y quitas el primer elemento. Si el arreglo no queda vacío, actualizas el valor de cada arreglo al formato de salida que quieres y lo guardas en el vector resultado.

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

my @vector = (
    "6\tRoma",
    "3\tParis",
    "5\tMadrid",
    "7\tYork",
    "9\tYork",
    "2\tRoma",
    "4\tParis",
    "1\tRoma",
);

my %valores;

for my $item (@vector) {
    my ($valor, $ciudad) = split "\t", $item;

    push @{$valores{$ciudad}}, $valor;
}

use Data::Dumper::Names;
print Dumper \%valores;

undef @vector;

for my $ciudad (keys %valores) {
    my @valores = @{$valores{$ciudad}};

    @valores = sort { $a < $b } @valores;

    shift @valores;

    if (@valores) {
        for my $valor (@valores) {
            $valor = "$valor\t$ciudad\n";
        }
        push @vector, @valores;
    }
}

print Dumper \@vector;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
%valores = (
             'Paris' => [
                          '3',
                          '4'
                        ],
             'Madrid' => [
                           '5'
                         ],
             'Roma' => [
                         '6',
                         '2',
                         '1'
                       ],
             'York' => [
                         '7',
                         '9'
                       ]
           );
@vector = (
            '3  Paris
'
,
            '2  Roma
'
,
            '1  Roma
'
,
            '7  York
'

          );
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2009-06-16 03:19 @180, editado 3 veces en total
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

Notapor gorkalinux » 2009-06-16 02:17 @137

Perfecto, explorer, has hecho en casi nada de código lo que yo no he conseguido en 6 veces más. No era muy amigo de los hashes, pero supongo que era porque aún no me había surgido un problema como esté. Tendré que acostumbrarme a su manejo porque la verdad es que te pueden salvar de más de una.

Muchas gracias de nuevo, explorer. Un saludo.
gorkalinux
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2009-04-14 02:23 @141


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 21 invitados

cron