Учебные материалы по математике | Функция reverse | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Функция reverse


—  размер уменьшился на 1.

Функция reverse

— изменяет порядок следования элементов аргумента на противоположный;

—  возвращает список – результат;

—  список – оригинал не меняется.

@a = (7,8,9);

@b = reverse(@a);

@b = (9,8,7)

Аналогично

@b = reverse(7,8,9);

Для изменения порядка в самом массиве надо:

@b = reverse(@b);

Функция sort

—  сортирует в порядке возрастания их кодов ASCII;

—  не меняет список-оригинал;

—  возвращает отсортированный список.

@a = (1,2,4,8,16,32,64);

@b = sort(@a);

@b = (1,16,2,32,4,64,8)

Функция chomp

Удаляет в каждом элемента массива символ новой строки (n).

@a = (“hellon”,”worldn”,”happy days”);

chomp @a;

теперь @a имеет вид (“hello”,”world”,”happy days”)

<STDIN> как массив

Для скаляра <STDIN> возвращает следующую введенную строку.

Для массива <STDIN> возвращает все строки, оставшиеся до конца файла. Каждая строка – это элемент массива.

—  строка -> n в конце;

—  Ctrl+D – конец ввода или файла.

Интерполяция массивов

В строках с двойными кавычками элемент массива может интерполироваться на его значение

@fred = (“hello”,”dolly”);

$a = 2;

$x = “This is $fred[1]’s place”;

“This is dolly’s place”

$x = “This is $fred[$a-1]’s place”; Аналогично

Индексное выражение вычисляется обычно и не интерполируется.

Что происходит, если есть $fred и @fred и [ ]?

Пример:

@fred = (“hello”,”dolly”);

$fred = “right”;

Пусть нам надо получить “This is right[1]”

Напишем следующее:

$x = “This is $fred[1]”;

$y = “This is ${fred}[1]”;

$z = “This is $fred”.”[1]”;

$w = “This is $fred[1]”;

Получаем

$x = “This is dolly”

А $y,$z,$w дают правильный результат, так как в них мы применили операции, которые выделяют скобку [, чтоб она не считалась частью массива.

Можно выбрать часть массива с помощью среза.

$al = “Now for @a[2,3] here”;

Получаем

$al = “Now for ccc 1 here”

Аналогично для отмены действия квадратных скобок можно применить любой из описанных выше механизмов.

Хеши

Это ассоциативные массивы.

Любой элемент хеша – это пара: ключ-значение. По ключу можно определить или задать значение. Все ключи должны быть уникальными. Имя хеша начинается со знака %. Обращение к элементам хеша %fred происходит указанием ключа:

$fred{$ключ},

где $ключ – любое скалярное выражение.

Элемент хеша создается присваиванием значения:

ключ значение

$fred{"aaa"}="bbb"; # $fred{234.2}=328.7

print $fred{"aaa"}; # Выводит "bbb"

$fred{234.2}+=3; # Значение равно 331.7

Если сделаем

@list=%fred

то массив @list будет содержать:

("aaa","bbb","234.2","331.7")

Если произведем

%barn=@list; # %barn станет тождественным %fred

%barney=%fred; # Ускоренное выполнение

%a=("aa","bb","2.8","34.1");

Получили хеш %a из литералов.

Внимание!! Порядок пар произвольный и контролю не поддается.

Операция reverse создает хеш, в которм ключи и значения меняются местами. Тогда, если значения были одинаковы, то они заменяются одним элементом.

%b= reverse(%a);

Хеш-функции

1.  keys (%имя_хеша)

Выдает список всех текущих ключей

@list=keys(%fred)

Получаем ("aaa","234.2") или ("234.2","aaa");

Чтобы проверить – пуст хеш или нет, надо использовать функцию %хеш в скалярном контесте.

2.  values (%имя_хеша)

Выдает список всех текущих значений в том порядке, в котором функция keys выдает ключи.

3.  each (%имя_хеша)

При каждом вычислении этой функции для одного хеша возвращается очередная пара: ключ-значение, пока не будут проверены все элементы. Если пар больше нет, each возвращает пустой список. Например:

while(($key,$value)=each(%fred))

{ print ("key=",$key, "value=", $value,"n");

}

4.  delete

Удаляет элементы хеша

delete $fred {"aaa"};

Эта пара: ключ-значение удаляется из хеша.

    Срезы хешей

Создаем хеш. Здесь числовые значения — выигрыши в некоторой игре.

$a{"fred"}=195;

$a{"barney"}=205;

$a{"dino"}=30;

Это можно записать одной строкой

($a{"fred"},$a{barney},$a{dino})=(195,205,30);

Это можно сделать срезом:

@a{"fred","barney","dino"}=(195,205,30);

Можно сочетать срез хеша и интерполяцию:

@plays=qw(fred barney dino);

print "Scores are:" @a{@plays}n";

Слияние хешей

@b{keys %a}= values %a;

Здесь значения хеша %a сливаются с хешем %b.

Ссылки

Ссылка – новый фундаментальный тип данных в Perl, впервые понятие было введено в Perl 5, как аналог указателей в языке Си.

Особенности:

—  ссылка ссылается на элемент данных;

—  чтоб добраться до данных, надо разыменовать ссылку.

Ссылки применяются для создания анонимных массивовв, хешей и шаблонов функций. С помощью их можно создать сложные структуры данных. Если подпрограмма передает более одного массива или хеша, которые при этом надо сохранить как индивидуальные структуры данных, то без ссылок не обойтись. (В противном случае элементы всех массивов и хешей сливаются в один длинный список.) Например, если подпрограмма находит скалярное произведение двух векторов:

S = a[1]x[1] + a[2]x[2] + ….. a[n]x[n]

 

Где ( a[1],a[2],…,a[n] ) и ( x[1],x[2],…..,x[n] ), то обязательно нужно применять ссылки, иначе элементы этих массивов сольются в один длинный список.

Кроме того, ссылка – это основа объектно-ориентированноuj программированиz на Perl.

Создание ссылки

Для этого существует специальный оператор — (обратный слеш):

$ref_const = "Hello! n";

$ref_scal = $variable;

$ref_arr = @array;

$ref_hash = %hash;

$ref_subr = &sbroutine;

$ref_glob = *name;

Получение значения из ссылки

А. Оператор разыменования

$$ref_const или $$ref_variable – разыменование скалярной ссылки;

@$ref_arr – разыменование массива;

%$ref_hash – разыменование хеша;

&$ref_subr – разыменование подпрограммы;

*$ref_glob – разыменование ссылки из таблицы символов.

Б. Разыменование с помощью оператора-стрелки

Этот оператор часто применяется для разыменования массивов, хешей и подпрограмм.

$ref_arr -> [1];

$ref_hash -> {key};

$ref_subr -> ("Hello!n"); это аргумент подпрограммы.

Если создан многомерный массив ( массив массивов ):

$ref_arr2 = [[1,2,3],[4,5,6]];

Тогда к элементу этого массива можно обратиться следующим образом:

$ref_arr2 ->[1] ->[1] или $ref_arr2 ->[1][1] или $$ref_arr2[1][1].

Вывод. Оператор –стрелку необязательно ставить между квадратными и фигурными скобками.

Пример:

$database[$a]->{$b}->[$c]=12.45;

Можно сделать и так:

$database1[$a]{$b}[$c]=12.45;

В. Разыменование с помощью блока

Прямая ссылка может иногда заменяться возвращающим ее блоком. Рассмотрим вышеизложенные примеры в случае применения блока.

$scal = ${$ref_scal};

$arr = @{$re_arr};

$hash = %{$ref_hash};

&{$ref_subr} (arg1,arg2);

*glob = *{ref_glob};

При создании ссылок можно использовать многоуровневость ссылок:

$refer_4 = \\"Hello!";

Для разыменования этой ссылки:

Print $$$$$refer_4;

Что будет, если мы воспользуеися такой конструкцией:

$$refer = 5;

print "$$refern";

print "$refern";

В первом случае будет выведено :

5

а во втором:

SCALAR (0x6a0b14)

В этом примере ссылки (то есть адрес в памяти ) используется до того, как она реально появилась. Такой процесс называется самооживлением (autovivification).

Анонимные массивы (массивы без имени)

Для их создания применется специальный генератор — это пара квадратных скобок. Например,

$ref_arr =[1,2,3,4];

Эта конструкция возвращает ссылку на анонимный массив, которая присваивается скалярной переменной.

Чтоб добраться до нужного элемента, нужно разыменовать ссылку без имени массива, так как имени массива просто нет.

Print $$ref_arr[1];

При этом будет выведено на печать

2

Можно было применить и оператор-стрелку:

Print $$ref_arr -> [1];

Анонимные массивы при интерполироании позволяют применять результат вызоыва подпрограммы или вычисления. Пример, в котором встроенная функция uc() переводит строку в внрхний регистр:

print "@{[uc(hello)]} there n";

Будет выведено:

Hello there.

Работа данного примера:

—  Perl конструкцию @{} считает блоком;

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020