Perl - tablice

Tablica to zmienna przechowująca uporządkowaną listę wartości skalarnych. Zmienne tablicowe są poprzedzone znakiem „at” (@). Aby odnieść się do pojedynczego elementu tablicy, użyjesz znaku dolara ($) z nazwą zmiennej, po której nastąpi indeks elementu w nawiasach kwadratowych.

Oto prosty przykład użycia zmiennych tablicowych -

#!/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";

Tutaj użyliśmy znaku ucieczki (\) przed znakiem $, aby go wydrukować. Inne Perl zrozumie to jako zmienną i wypisze jej wartość. Po uruchomieniu da to następujący wynik -

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

W Perlu terminy Lista i Tablica są często używane tak, jakby były zamienne. Ale lista to dane, a tablica to zmienna.

Tworzenie tablicy

Zmienne tablicowe są poprzedzone znakiem @ i zapełniane przy użyciu nawiasów lub operatora qw. Na przykład -

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

W drugim wierszu używany jest operator qw //, który zwraca listę ciągów, oddzielając je rozdzielonymi białymi znakami. W tym przykładzie prowadzi to do tablicy czteroelementowej; pierwszy element to „to”, a ostatni (czwarty) to „tablica”. Oznacza to, że możesz używać różnych linii w następujący sposób -

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

Możesz również wypełnić tablicę, przypisując każdą wartość indywidualnie w następujący sposób -

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

Dostęp do elementów tablicy

Podczas uzyskiwania dostępu do poszczególnych elementów z tablicy, należy poprzedzić zmienną znakiem dolara ($), a następnie dołączyć indeks elementu w nawiasach kwadratowych po nazwie zmiennej. Na przykład -

#!/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";

To da następujący wynik -

Mon
Tue
Wed
Sun
Sun
Mon

Indeksy tablic zaczynają się od zera, więc aby uzyskać dostęp do pierwszego elementu, musisz podać 0 jako indeksy. Możesz również podać indeks ujemny, w którym to przypadku wybierasz element na końcu, a nie na początku tablicy. Oznacza to, co następuje -

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

Tablice liczb sekwencyjnych

Perl oferuje skrót do kolejnych cyfr i liter. Zamiast wpisywać każdy element na przykład podczas liczenia do 100, możemy zrobić coś takiego:

#!/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

Tutaj nazywana jest podwójna kropka (..) range operator. To da następujący wynik -

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

Rozmiar tablicy

Rozmiar tablicy można określić za pomocą kontekstu skalarnego tablicy - zwracana wartość będzie liczbą elementów w tablicy -

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

Zwracana wartość zawsze będzie fizycznym rozmiarem tablicy, a nie liczbą prawidłowych elementów. Możesz to zademonstrować, a różnica między tablicą skalarną @array a tablicą $ #, używając tego fragmentu, jest następująca -

#!/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";

To da następujący wynik -

Size: 51
Max Index: 50

W tablicy zawierającej informacje są tylko cztery elementy, ale tablica ma długość 51 elementów i najwyższy indeks 50.

Dodawanie i usuwanie elementów w szyku

Perl udostępnia wiele przydatnych funkcji do dodawania i usuwania elementów w tablicy. Możesz mieć pytanie, co to jest funkcja? Do tej pory używałeśprintfunkcja drukowania różnych wartości. Podobnie istnieją różne inne funkcje lub czasami nazywane podprogramami, które można wykorzystać do różnych innych funkcji.

Sr.No. Rodzaje i opis
1

push @ARRAY, LIST

Umieszcza wartości z listy na końcu tablicy.

2

pop @ARRAY

Zdejmuje i zwraca ostatnią wartość tablicy.

3

shift @ARRAY

Odsuwa pierwszą wartość tablicy i zwraca ją, skracając tablicę o 1 i przenosząc wszystko w dół.

4

unshift @ARRAY, LIST

Dołącza listę na początek tablicy i zwraca liczbę elementów w nowej tablicy.

#!/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";

To da następujący wynik -

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

Wycinanie elementów tablicy

Możesz także wyodrębnić „wycinek” z tablicy - to znaczy możesz wybrać więcej niż jeden element z tablicy, aby utworzyć kolejną tablicę.

#!/usr/bin/perl

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

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

print "@weekdays\n";

To da następujący wynik -

Thu Fri Sat

Specyfikacja wycinka musi zawierać listę prawidłowych indeksów, dodatnich lub ujemnych, oddzielonych przecinkami. Aby uzyskać szybkość, możesz również użyć.. operator zakresu -

#!/usr/bin/perl

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

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

print "@weekdays\n";

To da następujący wynik -

Thu Fri Sat

Wymiana elementów tablicy

Teraz przedstawimy jeszcze jedną funkcję o nazwie splice(), który ma następującą składnię -

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

Ta funkcja usunie elementy @ARRAY wyznaczone przez OFFSET i LENGTH i zastąpi je LISTĄ, jeśli została określona. Na koniec zwraca elementy usunięte z tablicy. Oto przykład -

#!/usr/bin/perl

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

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

To da następujący wynik -

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

Tutaj faktyczna zamiana zaczyna się od szóstej liczby, po czym pięć elementów jest następnie zastępowanych od 6 do 10 numerami 21, 22, 23, 24 i 25.

Przekształć ciągi w tablice

Przyjrzyjmy się jeszcze jednej funkcji o nazwie split(), który ma następującą składnię -

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

Ta funkcja dzieli ciąg na tablicę ciągów i zwraca ją. Jeśli określono LIMIT, dzieli się na co najwyżej tę liczbę pól. Jeśli pominięto WZORZEC, dzieli na białe znaki. Oto przykład -

#!/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

To da następujący wynik -

Roses
Michael

Przekształć tablice w ciągi

Możemy użyć join()funkcja, aby ponownie połączyć elementy tablicy i utworzyć jeden długi łańcuch skalarny. Ta funkcja ma następującą składnię -

join EXPR, LIST

Ta funkcja łączy oddzielne ciągi LISTA w jeden ciąg z polami oddzielonymi wartością WYRAŻ i zwraca ciąg. Oto przykład -

#!/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";

To da następujący wynik -

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

Sortowanie tablic

Plik sort()funkcja sortuje każdy element tablicy zgodnie ze standardami numerycznymi ASCII. Ta funkcja ma następującą składnię -

sort [ SUBROUTINE ] LIST

Ta funkcja sortuje LISTĘ i zwraca posortowaną wartość tablicy. Jeśli określono SUBTROUTINE, podczas sortowania elementów stosowana jest logika podana wewnątrz SUBTROUTINE.

#!/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";

To da następujący wynik -

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

Należy pamiętać, że sortowanie odbywa się na podstawie wartości liczbowych ASCII słów. Dlatego najlepszą opcją jest najpierw przekształcenie każdego elementu tablicy na małe litery, a następnie wykonanie funkcji sortowania.

Zmienna $ [Special Variable

Do tej pory widzieliście proste zmienne, które zdefiniowaliśmy w naszych programach i używaliśmy ich do przechowywania i drukowania wartości skalarnych i tablicowych. Perl udostępnia wiele specjalnych zmiennych, które mają swoje predefiniowane znaczenie.

Mamy specjalną zmienną, która jest zapisana jako $[. Ta specjalna zmienna jest skalarem zawierającym pierwszy indeks wszystkich tablic. Ponieważ tablice Perla mają indeksowanie od zera, $ [będzie prawie zawsze równe 0. Ale jeśli ustawisz $ [na 1, to wszystkie tablice będą używać indeksowania opartego na indeksie. Zaleca się, aby nie używać innego indeksowania niż zero. Jednak weźmy jeden przykład, aby pokazać użycie zmiennej $ [zmienna -

#!/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";

To da następujący wynik -

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

Łączenie tablic

Ponieważ tablica to po prostu sekwencja wartości oddzielonych przecinkami, można je łączyć ze sobą, jak pokazano poniżej -

#!/usr/bin/perl

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

print "numbers = @numbers\n";

To da następujący wynik -

numbers = 1 3 4 5 6

Osadzone tablice po prostu stają się częścią głównej tablicy, jak pokazano poniżej -

#!/usr/bin/perl

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

@numbers = (@odd, @even);

print "numbers = @numbers\n";

To da następujący wynik -

numbers = 1 3 5 2 4 6

Wybieranie elementów z list

Notacja listy jest identyczna jak dla tablic. Możesz wyodrębnić element z tablicy, dołączając nawiasy kwadratowe do listy i podając jeden lub więcej indeksów -

#!/usr/bin/perl

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

print "value of var = $var\n"

To da następujący wynik -

value of var = 1

Podobnie możemy wyodrębniać plasterki, chociaż bez konieczności stosowania wiodącego znaku @ -

#!/usr/bin/perl

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

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

To da następujący wynik -

Value of list = 4 3 2