Come si sa (almeno per chi programma in perl), gli hash non hanno un ordine proprio, ma gestiscono solo le coppie chiave-valore.

Di recente ho dovuto inserire in un hash un elenco di chiavi (stringhe) con un conteggio come valore (interi), in pratica una tipica classifica estratta con un while parsando file di testo con una regex.
L’input dei dati è quello tipico:

my %hash;
while(<>) {
    my $parsato = /^regex$/;
    # …
    $hash{$parsato}++;
}

per ritrovarci con un hash che contiene chiavi (il testo regex’ato) e valori (numerici).
Per riordinarli ho deciso di estrarre un elenco di chiavi secondo un certo criterio (i valori numerici dal più alto al più basso), e poi tagliare i primi X valori che mi interessavano.

# Estraggo una lista di chiavi ordinate per valori in modo inverso
my @chiavi = sort { $hash{$b} <=> $hash{$a} } keys %hash;
# taglio i valori oltre l’$OFFSET dall’array
splice @chiavi,$OFFSET;
# mostro le mie $OFFSET chiavi con rispettivi valori
for (@chiavi) {
    print "$hash{$_} : $_ \n";
}



Write a comment


You need tologin.

    
SIMOTRONE WEB PAGE is based on WordPress platform, RSS tech , RSS comments design by Gx3.