Liste e array

A pochi caratteristiche più di Perl deve essere coperto prima di tutti i programmi più interessanti possono essere scritti. In primo luogo, abbiamo bisogno di Perl 'liste' (o 'array'). Una lista in Perl è come una classe dinamica array in C + + o Java (java.util.Vector ad esempio). Elenchi non utilizzare la sintassi di Perl oggetto, ma l'elenco è fondamentalmente un oggetto che possiede i dati e che ha un gruppo associato di funzioni. Un elenco Perl:

  

Possiede una collezione di elementi di dati (di solito valori scalari, ma è possibile creare liste di liste e di altre strutture più complesse, come spiegato nella perldsc. Does (OK, 'ha fatto si', in quanto tali non sono funzioni di membro di classe):

- Creare una lista, di solito l'inizializzazione con un insieme non vuoto di elementi di dati (anche se liste vuote vanno bene).

- Aggiungere elementi 'davanti' o 'alla fine' alla lista.

- Rimuovere gli elementi 'davanti' o 'alla fine' delle liste.

- Gli elementi di accesso a posizioni specifiche (questa caratteristica conferisce 'array' simili comportamenti, nonché comportamenti list).

- Restituisce la dimensione della sua collezione (lunghezza di matrice dinamica).

- Copia in un altro array.

Altre funzioni relative alle liste di includere le funzioni per l'ordinamento liste e per la restituzione delle copie degli elenchi con gli elementi in ordine inverso.

Elenchi sono designate con la '@' qualificatore di tipo. I loro nomi seguire le convenzioni abituali

- Lettera seguita da codici alfanumerici (e alcuni altri caratteri speciali nei nomi per le liste fornite nel nucleo Perl). Quando i nomi che fanno, Perl considera il carattere di sottolineatura come una lettera. Nomi di lista validi sono:

@ @ mylist risultati inputlines @ @ @ _data list_1

Perl mantiene distinti 'namespace' per la sua scalare diverse, lista e tipi di dati hash (e di altri tipi, come 'handle di file'). Si può avere un $ scalare i risultati e un elenco @ Perl risultati senza causare alcuna confusione (anche se si può sconvolgere un programmatore inesperto di manutenzione che ha a guardare dopo il vostro codice).

Elenco letterali sono supportati: (1, 2, 3) ( "Tom", "Dick", "Harry", "Sue") ($ nome, indirizzo, $ citta)

Elenco letterali sono spesso utilizzati per inizializzare gli array. Un altro utilizzo è l'elenco letterale come 'value' (qualcosa sul lato sinistro di un'istruzione di assegnazione). Questo utilizzo sarà illustrato in seguito, è una comodità funzionalità relative alla estrazione di elementi specifici da un elenco esistente. Alcuni esempi di letterali elenco viene utilizzato in lista / creazione array sono:

@ PlacesIveBeen = (); # ho ancora da nessuna parte - sì, una lista vuota @ GradePts = (45, 50, 65, 75, 85); @ Cities = ( "London", "Paris", "New York" , "Roma", "Tokyo", "Sydney"); persone = @ ( "Tom", "Dick", "Harry", "Sue"); @ TeenYears = (13 .. 19);

L'ultimo di questi illustra Perl '..' range operatore. Questo è un modo di definire a breve la raccolta di (13, 14, 15, 16, 17, 18, 19). Operatori Range può essere utilizzato in 'foreach' iterativo costrutti - per (1 .. 100); loop foreach sono spiegate più avanti in questo articolo. Dato che è comune a necessità di inizializzare una lista di parole, Perl ha una funzione di supporto qw () . Pertanto, si potrebbe avere:

People @ = qw (Dick Tom harry Sue);

Il qw () non è sempre appropriato. L'utilizzo seguenti:

@ Città = qw (London Paris 'New York' Roma Tokyo Sydney);

risultati in una lista come: (Londra, Parigi, 'New, York', Roma, Tokyo, Sydney), che non è probabilmente ciò che è stato destinato. Il seguente frammento di codice illustra la creazione e l'utilizzo di alcune liste. Il loop illustrano diversi modi di accedere gli elementi della lista:

@ Cities1 = ( "London", "Paris", "New York"); # una lista con 3 elementi @ Cities2 = qw (Roma, 'Los Angeles' "San Francisco"); # 5 elementi! @ Cities3 = ( "Wagga "," fieno "," Cooma "); # come QQ () e q (), qw () permette di altri delimitatori: @ Cities4 = qw \ Thiroul Bellambi Keiraville \; Cities1 print": \ n "; $ size = @ Cities1; for ($ i = 0; $ i <$ size; $ i + +) (print $ Cities1 [$ i], "\ n";) print "Cities1: \ n"; foreach $ city (@ Cities2) (print Città $, "\ n";) print "Cities3: \ n"; foreach $ i (0 .. $ # Cities3) (print $ i Cities3 [$], "\ n";) print "Cities4: @ Cities4 \ n "; print @ Cities4;

La linea di $ size = @ Cities1; illustra l'uso di un array in un 'contesto scalare'; Perl interpreta questo come una richiesta per la lunghezza della matrice, così $ dimensione assume il valore 3. Il primo ciclo for è un ciclo convenzionale di conteggio, con l'indice di ciclo utilizzato per indicizzare la raccolta @ Cities1. Notate l'uso $ Città [$ i]; il tipo di dati è qui uno scalare - noi siamo l'estrazione di un singolo elemento di dati a partire dalla posizione specificata nella collezione. Il secondo e il terzo per i cicli sono esempi di loop Perl costrutto foreach. Questi anelli hanno la forma:

foreach  (list) di blocco foreach (list) di blocco

(La parola chiave formay essere usato al posto di foreach, foreach, ma è più leggibile.) Di solito si desidera una variabile che fa riferimento l'elemento corrente dalla lista, ma questo non è essenziale. Il primo dei loop foreach nel codice di esempio accessi semplicemente ogni dei (cinque!) elementi di $ Cities2, stampa il nome di ciascuno di turno. Il secondo è più simile a un conteggio di ciclo, l'espressione $ # Cities3 restituisce l'(scalare), valore che è l'indice dell'ultimo elemento della lista @ Cities3. Di conseguenza, questo ciclo è davvero foreach $ i (0, 1, 2) (... ); Questo ciclo utilizza ancora una volta l'indicizzazione stile array per estrarre gli elementi di dati dalla lista. Infine, l'elenco $ Cities4 viene stampato due volte. La prima dichiarazione di stampa è l'elenco interpolato in una stringa, questa stampa gli elementi separati da spazi. I risultati finali istruzione print in linea con tutti gli elementi di dati concatenati in una stringa lunga (non una forma particolarmente utile di uscita, solo un altro elemento del sistema di Perl). Le liste possono essere concatenati tra loro:

@ Maschio = qw (Mickey Donald); @ Maschio = qw (Minnie Daisy); @ DisneyMob = (@ Maschio, @ Maschio, "Pluto");

Ciò produce un unico elenco di livello (non un tipo Lisp elenco delle liste):

Topolino, Paperino, Minnie, Daisy, Plutone array possono essere 'tagliati' per dare sottoarray: @ line = qw (uno due tre quattro); firsttwo = @ @ line [0,1]; @ line [0,1] = ( "cinque", "sei");

o possono avere valori di spinta e schioccato:

@ stack = (); push (@ stack, "one"); push (@ stack, "two"); push (@ stack, 3, 4); push (@ stack, 5, 6, 7, 8, " nove ", 101); print @ stack," \ n "; $ val = pop (@ stack); print" @ stack \ n ";

(a turni e del lavoro unshift in modo analogo, in funzione all'inizio piuttosto che la fine di un elenco. È possibile combinare spingendo e spostando ecc per ottenere qualcosa come un doppio attacco di coda.) La funzione inversa restituisce una copia della lista con gli elementi in ordine inverso. Per impostazione predefinita, la funzione di ordinamento utilizza un ordinamento alfabetico, trattando tutti gli elementi di lista come stringhe, ancora una volta restituisce una nuova lista.

@ newRevList = reverse (@ aList); @ list1 = qw (Questa è una prova che altro Ciao Mondo Hi Mom etc etc); # Stampe come: List1: Questa è una prova che altro Ciao Mondo Hi Mom etc etc # sorta Peform, quindi stampare elenco ordinato; lettere maiuscole Rank # inferiore lettere minuscole ... Ordinati: Ciao Ciao di questo mondo un altro etc etc test è quello che la mamma # Alcuni dati numerici @ list2 = (100, 26, 3, 49, -11 , 3001, 78);
# Sorted! (Ordinati alfabeticamente) Ordinati: -11 100 26 3 3001 49 78

Il comportamento predefinito di ordinamento alfabetico di ordinamento può essere modificato, è necessario fornire la subroutine di supporto proprio ordinamento. Le funzioni di supporto per la selezione sono un po 'atipica di routine definita dall'utente, ma non sono difficili da scrivere. La vostra routine saranno chiamati a restituire il risultato di un'operazione di confronto su due elementi dell'array - questi elementi sono stati messi in variabili globali $ ae $ b prima della chiamata a subroutine. (L'uso di specifiche variabili globali è ciò che rende queste subroutine tipo diverso da altri programmatori definiti routine.) Il codice seguente illustra la definizione e l'utilizzo di una subroutine sort helper 'numeric_sort'.

#! / share / bin / perl-w numeric_sort sub (if ($ a <b) (return -1;) elsif ($ a == $ b) (return 0;) else (return 1;)) @ list2 = (100, 26, 3, 49, -11, 3001, 78); @ slist2 = sort @ list2; List2 "print @ list2 \ n"; "stampa Ordinati List2 sort (default) @ slist2 \ n"; @ nlist2 = numeric_sort sort @ list2; print "Sorted List2 (tipo numerico) @ nlist2 \ n";

Perl ha una speciale <=> operatore per il confronto numerico; con questo operatore, la funzione numerica genere potrebbe essere semplificata:

numeric_sort sub (@ a <=> $ b)

Perl consente in linea di definizione delle funzioni di supporto genere, consentendo costrutti come:

@ nlist2 = sort ($ a <=> $ b) @ list2;
un articolo presentato da Sarah Miller


Disclaimer:Il nostro sito non è responsabile per il contenuto di questo articolo. Webarticles è una risorsa gratuita di informazioni.
Importante: Questo articolo "liste e array" è stato tradotto da un software automatico. Ci dispiace per eventuali errori di ortografia che possono essersi verificati. Grazie per la vostra comprensione.


Online: 257 users browsing the articles directory