Perl - Arrays

Un array è una variabile che memorizza un elenco ordinato di valori scalari. Le variabili di matrice sono precedute da un segno "at" (@). Per fare riferimento a un singolo elemento di un array, utilizzerai il simbolo del dollaro ($) con il nome della variabile seguito dall'indice dell'elemento tra parentesi quadre.

Ecco un semplice esempio di utilizzo delle variabili array:

#!/usr/bin/perl

@ages = (25, 30, 40);             
@names = ("John Paul", "Lisa", "Kumar");

print "\$ages[0] = $ages[0]\n";
print "\$ages[1] = $ages[1]\n";
print "\$ages[2] = $ages[2]\n";
print "\$names[0] = $names[0]\n";
print "\$names[1] = $names[1]\n";
print "\$names[2] = $names[2]\n";

Qui abbiamo usato il segno di escape (\) prima del segno $ solo per stamparlo. Un altro Perl lo interpreterà come una variabile e ne stamperà il valore. Quando viene eseguito, questo produrrà il seguente risultato:

$ages[0] = 25
$ages[1] = 30
$ages[2] = 40
$names[0] = John Paul
$names[1] = Lisa
$names[2] = Kumar

In Perl, i termini List e Array sono spesso usati come se fossero intercambiabili. Ma l'elenco è i dati e l'array è la variabile.

Creazione di array

Le variabili array sono precedute dal segno @ e vengono popolate utilizzando le parentesi o l'operatore qw. Ad esempio:

@array = (1, 2, 'Hello');
@array = qw/This is an array/;

La seconda riga utilizza l'operatore qw //, che restituisce un elenco di stringhe, separando la stringa delimitata da uno spazio bianco. In questo esempio, ciò porta a una matrice di quattro elementi; il primo elemento è "this" e l'ultimo (quarto) è "array". Ciò significa che puoi utilizzare linee diverse come segue:

@days = qw/Monday
Tuesday
...
Sunday/;

È anche possibile popolare un array assegnando ogni valore individualmente come segue:

$array[0] = 'Monday';
...
$array[6] = 'Sunday';

Accesso agli elementi dell'array

Quando si accede a singoli elementi da un array, è necessario anteporre alla variabile un segno di dollaro ($) e quindi aggiungere l'indice dell'elemento tra parentesi quadre dopo il nome della variabile. Ad esempio:

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

print "$days[0]\n";
print "$days[1]\n";
print "$days[2]\n";
print "$days[6]\n";
print "$days[-1]\n";
print "$days[-7]\n";

Questo produrrà il seguente risultato:

Mon
Tue
Wed
Sun
Sun
Mon

Gli indici degli array iniziano da zero, quindi per accedere al primo elemento è necessario fornire 0 come indici. Puoi anche dare un indice negativo, nel qual caso selezioni l'elemento dalla fine, piuttosto che dall'inizio, dell'array. Ciò significa quanto segue:

print $days[-1]; # outputs Sun
print $days[-7]; # outputs Mon

Matrici di numeri sequenziali

Perl offre una scorciatoia per numeri e lettere sequenziali. Invece di digitare ogni elemento quando contiamo fino a 100, ad esempio, possiamo fare qualcosa di simile a quanto segue:

#!/usr/bin/perl

@var_10 = (1..10);
@var_20 = (10..20);
@var_abc = (a..z);

print "@var_10\n";   # Prints number from 1 to 10
print "@var_20\n";   # Prints number from 10 to 20
print "@var_abc\n";  # Prints number from a to z

Qui viene chiamato il doppio punto (..) range operator. Questo produrrà il seguente risultato:

1 2 3 4 5 6 7 8 9 10
10 11 12 13 14 15 16 17 18 19 20
a b c d e f g h i j k l m n o p q r s t u v w x y z

Dimensione array

La dimensione di un array può essere determinata utilizzando il contesto scalare sull'array - il valore restituito sarà il numero di elementi nell'array -

@array = (1,2,3);
print "Size: ",scalar @array,"\n";

Il valore restituito sarà sempre la dimensione fisica dell'array, non il numero di elementi validi. Puoi dimostrarlo e la differenza tra scalar @array e $ # array, usando questo frammento è la seguente:

#!/usr/bin/perl

@array = (1,2,3);
$array[50] = 4;

$size = @array;
$max_index = $#array;

print "Size:  $size\n";
print "Max Index: $max_index\n";

Questo produrrà il seguente risultato:

Size: 51
Max Index: 50

Ci sono solo quattro elementi nell'array che contiene informazioni, ma l'array è lungo 51 elementi, con un indice massimo di 50.

Aggiunta e rimozione di elementi in array

Perl fornisce una serie di funzioni utili per aggiungere e rimuovere elementi in un array. Potresti avere una domanda che cos'è una funzione? Finora hai usatoprintfunzione per stampare vari valori. Allo stesso modo ci sono varie altre funzioni o talvolta chiamate sub-routine, che possono essere utilizzate per varie altre funzionalità.

Sr.No. Tipi e descrizione
1

push @ARRAY, LIST

Inserisce i valori dell'elenco alla fine dell'array.

2

pop @ARRAY

Si apre e restituisce l'ultimo valore dell'array.

3

shift @ARRAY

Sposta il primo valore dell'array e lo restituisce, accorciando l'array di 1 e spostando tutto verso il basso.

4

unshift @ARRAY, LIST

Antepone l'elenco all'inizio dell'array e restituisce il numero di elementi nel nuovo array.

#!/usr/bin/perl

# create a simple array
@coins = ("Quarter","Dime","Nickel");
print "1. \@coins  = @coins\n";

# add one element at the end of the array
push(@coins, "Penny");
print "2. \@coins  = @coins\n";

# add one element at the beginning of the array
unshift(@coins, "Dollar");
print "3. \@coins  = @coins\n";

# remove one element from the last of the array.
pop(@coins);
print "4. \@coins  = @coins\n";

# remove one element from the beginning of the array.
shift(@coins);
print "5. \@coins  = @coins\n";

Questo produrrà il seguente risultato:

1. @coins = Quarter Dime Nickel
2. @coins = Quarter Dime Nickel Penny
3. @coins = Dollar Quarter Dime Nickel Penny
4. @coins = Dollar Quarter Dime Nickel
5. @coins = Quarter Dime Nickel

Slicing Array Elements

Puoi anche estrarre una "fetta" da un array, ovvero puoi selezionare più di un elemento da un array per produrre un altro array.

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

@weekdays = @days[3,4,5];

print "@weekdays\n";

Questo produrrà il seguente risultato:

Thu Fri Sat

La specifica per una sezione deve avere un elenco di indici validi, positivi o negativi, ciascuno separato da una virgola. Per la velocità, puoi anche usare il.. operatore di gamma -

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

@weekdays = @days[3..5];

print "@weekdays\n";

Questo produrrà il seguente risultato:

Thu Fri Sat

Sostituzione degli elementi dell'array

Ora introdurremo un'altra funzione chiamata splice(), che ha la seguente sintassi:

splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]

Questa funzione rimuoverà gli elementi di @ARRAY designati da OFFSET e LENGTH e li sostituirà con LIST, se specificato. Infine, restituisce gli elementi rimossi dall'array. Di seguito è riportato l'esempio:

#!/usr/bin/perl

@nums = (1..20);
print "Before - @nums\n";

splice(@nums, 5, 5, 21..25); 
print "After - @nums\n";

Questo produrrà il seguente risultato:

Before - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
After - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20

Qui, la sostituzione effettiva inizia con il sesto numero, dopodiché cinque elementi vengono sostituiti da 6 a 10 con i numeri 21, 22, 23, 24 e 25.

Trasforma le stringhe in array

Diamo un'occhiata a un'altra funzione chiamata split(), che ha la seguente sintassi:

split [ PATTERN [ , EXPR [ , LIMIT ] ] ]

Questa funzione divide una stringa in un array di stringhe e la restituisce. Se viene specificato LIMIT, si divide al massimo in quel numero di campi. Se PATTERN viene omesso, si divide in spazi bianchi. Di seguito è riportato l'esempio:

#!/usr/bin/perl

# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens";
$var_names = "Larry,David,Roger,Ken,Michael,Tom";

# transform above strings into arrays.
@string = split('-', $var_string);
@names  = split(',', $var_names);

print "$string[3]\n";  # This will print Roses
print "$names[4]\n";   # This will print Michael

Questo produrrà il seguente risultato:

Roses
Michael

Trasforma array in stringhe

Possiamo usare il file join()funzione per ricongiungere gli elementi dell'array e formare una lunga stringa scalare. Questa funzione ha la seguente sintassi:

join EXPR, LIST

Questa funzione unisce le stringhe separate di LIST in una singola stringa con campi separati dal valore di EXPR e restituisce la stringa. Di seguito è riportato l'esempio:

#!/usr/bin/perl

# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens";
$var_names = "Larry,David,Roger,Ken,Michael,Tom";

# transform above strings into arrays.
@string = split('-', $var_string);
@names  = split(',', $var_names);

$string1 = join( '-', @string );
$string2 = join( ',', @names );

print "$string1\n";
print "$string2\n";

Questo produrrà il seguente risultato:

Rain-Drops-On-Roses-And-Whiskers-On-Kittens
Larry,David,Roger,Ken,Michael,Tom

Ordinamento degli array

Il sort()funzione ordina ogni elemento di un array in base agli standard numerici ASCII. Questa funzione ha la seguente sintassi:

sort [ SUBROUTINE ] LIST

Questa funzione ordina la LISTA e restituisce il valore dell'array ordinato. Se viene specificato SUBROUTINE, la logica specificata all'interno di SUBTROUTINE viene applicata durante l'ordinamento degli elementi.

#!/usr/bin/perl

# define an array
@foods = qw(pizza steak chicken burgers);
print "Before: @foods\n";

# sort this array
@foods = sort(@foods);
print "After: @foods\n";

Questo produrrà il seguente risultato:

Before: pizza steak chicken burgers
After: burgers chicken pizza steak

Si noti che l'ordinamento viene eseguito in base al valore numerico ASCII delle parole. Quindi l'opzione migliore è trasformare prima ogni elemento dell'array in lettere minuscole e quindi eseguire la funzione di ordinamento.

La variabile speciale $ [

Finora hai visto semplici variabili che abbiamo definito nei nostri programmi e le abbiamo usate per memorizzare e stampare valori scalari e array. Perl fornisce numerose variabili speciali, che hanno il loro significato predefinito.

Abbiamo una variabile speciale, scritta come $[. Questa variabile speciale è uno scalare contenente il primo indice di tutti gli array. Poiché gli array Perl hanno un'indicizzazione in base zero, $ [sarà quasi sempre 0. Ma se imposti $ [a 1, tutti gli array useranno l'indicizzazione in base. Si consiglia di non utilizzare nessun'altra indicizzazione diversa da zero. Tuttavia, facciamo un esempio per mostrare l'utilizzo di $ [variabile -

#!/usr/bin/perl

# define an array
@foods = qw(pizza steak chicken burgers);
print "Foods: @foods\n";

# Let's reset first index of all the arrays.
$[ = 1;

print "Food at \@foods[1]: $foods[1]\n";
print "Food at \@foods[2]: $foods[2]\n";

Questo produrrà il seguente risultato:

Foods: pizza steak chicken burgers
Food at @foods[1]: pizza
Food at @foods[2]: steak

Unione di matrici

Poiché un array è solo una sequenza di valori separati da virgole, puoi combinarli insieme come mostrato di seguito:

#!/usr/bin/perl

@numbers = (1,3,(4,5,6));

print "numbers = @numbers\n";

Questo produrrà il seguente risultato:

numbers = 1 3 4 5 6

Gli array incorporati diventano solo una parte dell'array principale come mostrato di seguito -

#!/usr/bin/perl

@odd = (1,3,5);
@even = (2, 4, 6);

@numbers = (@odd, @even);

print "numbers = @numbers\n";

Questo produrrà il seguente risultato:

numbers = 1 3 5 2 4 6

Selezione di elementi dagli elenchi

La notazione dell'elenco è identica a quella degli array. Puoi estrarre un elemento da un array aggiungendo parentesi quadre all'elenco e fornendo uno o più indici -

#!/usr/bin/perl

$var = (5,4,3,2,1)[4];

print "value of var = $var\n"

Questo produrrà il seguente risultato:

value of var = 1

Allo stesso modo, possiamo estrarre le sezioni, anche se senza la necessità di un carattere @ iniziale -

#!/usr/bin/perl

@list = (5,4,3,2,1)[1..3];

print "Value of list = @list\n";

Questo produrrà il seguente risultato:

Value of list = 4 3 2