-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[52] Come ordino un array per (qualcosa)?

Fornite una funzione di confronto a sort() (descritta in perlfunc/sort):

    @lista = sort { $a <=> $b } @lista;

La funzione di ordinamento predefinita è cmp, confronto tra stringhe, che ordinerebbe (1, 2, 10) in (1, 10, 2). <=>, utilizzato sopra, è l'operatore di confronto numerico.

Se avete bisogno di una funzione complessa che estragga la parte su cui desiderate basare l'ordinamento, non scrivetela all'inerno della funzione di ordinamento. Estraete tale parte prima, poiché il BLOCCO di ordinamento può essere chiamato molte volte per lo stesso elemento. Ecco un esempio di come estrarre la prima parola dopo il primo numero da ciascun elemento, e poi ordinare tali parole senza distinguere lettere maiuscole da lettere minuscole.

    @indice = ();
    for (@dati) {
        ($chiave) = /\d+\s*(\S+)/;
        push @indice, uc($chiave);
    }
    @ordinati = @dati[ sort { $indice[$a] cmp $indice[$b] } 0 .. $#indice ];

che potrebbe anche essere scritto come segue, utilizzando un trucco diventato noto come la Trasformata di Schwartz:

    @ordinati = map  { $_->[0] }
                sort { $a->[1] cmp $b->[1] }
                map  { [ $_, uc( (/\d+\s*(\S+)/)[0]) ] } @dati;

Se avete bisogno di basare l'ordinamento su svariati campi, è utile il seguente paradigma.

     @ordinati = sort { campo1($a) <=> campo1($b) ||
                        campo2($a) cmp campo2($b) ||
                        campo3($a) cmp campo3($b)
                      }     @data;

Questo può essere convenientemente combinato con il calcolo preventivo delle chiavi, come descritto sopra.

Per ulteriori informazioni su questo approccio, consultate l'articolo sort nella collezione "Far More Than You Ever Wanted To Know" ["Molto più di quanto avreste mai voluto sapere", NdT] all'indirizzo http://www.cpan.org/olddoc/FMTEYEWTK.tgz [in inglese, NdT].

Consultate anche la domanda sull'ordinamento degli hash, riportata sotto.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google