Hay otras y mejores formas para hacer esto. El problema con esa solución es que es de complejidad O(n*n). Más comprensiblemente, que el tiempo necesario para completarlo sube bastante rápidamente con el número de claves en el hash. Si el número de claves se dobla, el tiempo se cuadruplica (pues, después de traspasar algún número, el O() significa que hay algunas constantes que necesitaríamos si quisiéramos computar el tiempo necesario, pero no nos importan ahora. Ver
http://es.wikipedia.org/wiki/Cota_super ... %C3%B3tica )
Aquí hay otras dos posibilidades:
Using perl Syntax Highlighting
{
my %tmp;
foreach my $key (sort keys %hash) {
$tmp{$hash{$key}} = $key unless exists $tmp{$hash{$key}};
}
%hash = reverse %tmp;
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
o
Using perl Syntax Highlighting
{
my %tmp;
foreach my $key (keys %hash) {
$tmp{$hash{$key}} = $key if !exists $tmp{$hash{$key}} or $tmp{$hash{$key}} > $key;
}
%hash = reverse %tmp;
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
La primera es O(n*log(n)), la segunda O(n). Ambas usan el otro hash. El otro hash nos ayuda a obtener los valores únicos.
Espero que explorer puede ponerlo más claro, mi español es terrible.
Jenda
-------------------------------------------------------
- Estoy aquí para practicar español. Si te ayudó mi respuesta ayudame con un mensaje privado sobre mis faltas por favor. Seguramente habrá muchas