• Publicidad

Ordenar este array alfabéticamente por el valor

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Ordenar este array alfabéticamente por el valor

Notapor danimera » 2009-04-30 15:40 @695

Tengo este hash:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$loop{$id} = $nombre;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Bueno y son varios id con varios nombres; lo que deseo es ordenarlos alfabéticamente por el valor y no por la llave, intenteté algo por aquí pero no resultó y me urge ordenar esta hash.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach my $llave (sort {$loop{$a} <= $loop{$b}} keys %loop){
                $loop{$llave} = $llave;
        }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Los valores que contiene son de la siguiente forma:

Código: Seleccionar todo
$loop{5} = 'punto5';
$loop{4} = 'punto3';
$loop{3} = 'punto7';
$loop{2} = 'punto1';
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Notapor explorer » 2009-04-30 15:53 @703

Los diccionarios no se pueden ordenar, salvo que uses algo como Tie::IxHash, como se comenta en el perlfaq4, How can I make my hash remember the order I put elements into it?.

Hay varias técnicas para ordenar por valor, como se comenta en el perlfaq4, How do I sort a hash (optionally by value instead of key)?.
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 danimera » 2009-04-30 18:21 @806

Bueno, no, me referí más bien a imprimirlos en orden de los valores...
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Notapor explorer » 2009-04-30 18:28 @811

Pues si solo quieres sacar ordenados los valores, te vale con un
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print sort values %loop;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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 Jenda » 2009-05-03 10:37 @484

Casi. Debes usar <=> para comparar números o cmp para comparar cadenas. La expresión sort debe devolver -1 si el primer argumento es menor (debe ser ordenado antes del otro), 0 si los argumentos tienen el mismo tamaño y 1 si el primer argumento es mayor.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach my $llave (sort {$loop{$a} <=> $loop{$b}} keys %loop){
...
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
-------------------------------------------------------
- Estoy aquí para practicar español. Si te ayudó mi respuesta ayudame con un mensaje privado sobre mis faltas por favor. Seguramente habrá muchas :-)
Jenda
Perlero nuevo
Perlero nuevo
 
Mensajes: 132
Registrado: 2007-10-29 06:31 @313
Ubicación: Praga, Republica Checa


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 13 invitados

cron