2010-03-09 6 views
8
#!/usr/bin/perl 
use strict; 
use warnings; 

my %hash; 
foreach (1 .. 10) { 
    $hash{$_} = $_; 
} 
foreach (sort(keys %hash)) { 
    print $_ . ": " . "$hash{$_}" . "\n" ; 
} 

Cuando ejecuto el código anterior, el resultado es la siguiente:¿Por qué el "orden" de Perl no pone estas teclas hash en orden numérico?

 
1: 1 
10: 10 
2: 2 
3: 3 
4: 4 
5: 5 
6: 6 
7: 7 
8: 8 
9: 9 

espero "10: 10" que es el último que se imprime. Solo necesito que alguien me explique por qué Perl me sorprende en este caso.

+6

Un hash con claves 1..10 se llama matriz. – jrockway

Respuesta

-3

No se olvide que las claves en un hash de Perl siempre se almacenan como cadenas por lo que la salida no tiene sentido .

+6

Perl los almacena como cadenas _y_ como números. El problema aquí es que, por defecto, ordena las cadenas. – mirod

+0

Las claves de un hash se almacenan como cadenas, pero incluso si se almacenan como números 'sort' todavía ordena utilizando la comparación de cadenas. –

+0

Las teclas hash no son SV, por lo que no tienen la misma magia que los escalares normales de Perl. Esta es la razón por la cual, por ejemplo, puede deshacer cadenas utilizándolas como una clave hash y devolviéndolas con las teclas(). –

Cuestiones relacionadas