Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Функции для обработки списков
В рассмотренных ранее в этой главе примерах мы познакомились с тем, как создать список, сохранить его в качестве значения переменной, организовать итерации по всем элементам списка и получить доступ к индивидуальному элементу списка. В этом разделе вы познакомитесь еще с несколькими функциями, которые расширяют набор возможностей для работы со списками. ФУНКЦИЯ REVERSE Функция reverse реверсирует элементы списка. Она имеет следующий формат: @new_list = reverse(@List);Функция reverse реверсирует список и возвращает новый результирующий список. Следующий пример иллюстрирует использование функции reverse: @list = reverse(1..5); # Результат 5,4,3,2,1 @list = reverse(@list); # Результат 1,2,3,4,5ФУНКЦИЯ SORT Функция sort сортирует элементы списка. Она имеет следующий формат: @new_list = sort(@List);Или @new_list = sort(Subroutine @List);Или @new_list = sort(blockstatement @List);Функция sort размещает элементы в списке, упорядочивая их в соответствии с порядковыми номерами символов в таблице ASCII-кодов. Так же как и функция reverse, функция sort возвращает в качестве значения новый список и не воздействует на исходный список. Следующий пример иллюстрирует использование функции sort: @list = sort (1,5,2,3,4); # Результат 1,2,3,4,5 @list = sort(1,2,10); # 1,10,2 сортировка в ASCIIВ подпрограмме или блоке можно изменять упорядочение, в соответствии с которым выполняется сортировка. Следующий пример иллюстрирует использование функции sort. @list = sort({$a <=> $b} (2,1,10)); # @list 1,2,10 @list = sort({$b <=> $a}) (2,1,10); # @list 10,2,1 Sub mycomp { $b <=> $a } @list = sort(mycomp (2,1,10)); # @list 10,2,1ФУНКЦИИ РАБОТЫ С МАССИВАМИ Как известно, массив представляет собой структуру данных, содержащую одно или несколько значений величин одного типа, например, 100 имен студентов. Perl содержит несколько встроенных функций, которые помогают работать с элементами массива. В следующих разделах рассматривается несколько основных функций для обработки массивов. ФУНКЦИИ PUSH И POP Скрипты языка Perl используют фикции push и pop для того, чтобы добавлять и удалять элементы с конца массива. Иными словами, функции push и pop позволяют скриптам выполнять операции со стеком по принципу: последним вошел, первым вышел. Функция push имеет следующий формат: Push(@ARRAY, LIST);Следующий фрагмент иллюстрирует использование функции push: @list = (); Push(@list,10,20); # @list теперь (10,20) Push(@list,1..3); # @list теперь (10,20,1,2,3)В противоположность этому функция pop удаляет элемент, который был вставлен в стек последним и возвращает значение этого элемента. Функция pop имеет следующий формат: $value = pop(@ARRAY);Следующий фрагмент программы иллюстрирует использование функции pop: # Возьмём @list из предыдущего примера Print pop(@list); # Выведет 3 Print pop(@list); # Выведет 2 # Теперь @list (10,20)ФУНКЦИЯ SHIFT Функция shift удаляет и возвращает элемент из начала массива. Эта функция аналогична функции pop с тем только отличием, что работает от начала массива по принципу FIFO (<первым вошел, первым вышел>). Функция shift имеет следующий формат: $value = shift(@ARRAY);Следующий фрагмент программы иллюстрирует использование функции shift: # Возьмём @list из предыдущего примера Print shift(@list); # Выведет 10 Print shift(@list); # Выведет 20 # Теперь @list ()ФУНКЦИЯ UNSHIFT Функция unshift добавляет один или больше элементов к началу массива. Она имеет следующий код: Unshift(@Array, List);Следующий фрагмент программы иллюстрирует использование функции unshift: # @list = () Unshift(@list,5,10,20); # @list (5,10,20) Unshift(@list, 1..3); # @list (1,2,3,5,10,20)ФУНКЦИЯ SPLICE Скрипты языка Perl используют функцию splice для того, чтобы извлекать элементы из списка, заменяя их элементами другого списка. Она имеет следующий формат: Splice(@Array, Offset[, Count[, List]]);Функция splice извлекает указанное число элементов {Count)из массива (@Аrraу), начиная с элемента, на который указывает величина сдвига (Offset), и заменяет элементы элементами другого списка (List). Если в вызове функции не указан параметр Count, функция извлекает элементы до самого конца массива. Если в вызове функции не указан список, элементами которого замещаются исходные элементы, то функция не добавляет никаких элементов к первоначальному списку. Следующее выражение иллюстрирует использование функции splice: ФУНКЦИЯ SCALAR Функция scalar определяет число элементов в списке. Она имеет следующий формат: Rsult = scalar(List);Обычно скрипты языка Perl не нуждаются в использовании функции scalar применительно к массивам, потому что когда скрипт обращается к массиву, записывая его в скалярном контексте, то он получает в качестве возвращаемой величины число элементов массива. Тем не менее, скрипты могут использовать функцию scalar в случаях, когда контекст является неоднозначным или если список не является массивом. Следующее выражение иллюстрирует использование функции scalar. @list = 1..10; Print scalar(@list); # Выведет размер @listФУНКЦИЯ GREP Функция grep фильтрует элементы списка, для которых заданное выражение принимает значение <ложно>. Она имеет следующий формат: @list = grep(Expression, List);Функция grep просматривает элементы списка, подставляя их вкачестве аргумента в заданное выражение. Функция grep присваивает текущее выражение элемента списка переменной $_ и вычисляет заданное выражение. Если полученное выражение является истинным, то функция grep добавляет этот элемент к результирующему списку. Следующий фрагмент программы иллюстрирует использование функции grep: @list = grep($_ & 1, 1..10); # @list (1,3,5,7,9) @list = ('a', '' 'b'); # @list ('a',' ','b') @list = grep($_ eq '', @list); # @list ('a','b')Примечание: Если выражение, модифицирует переменную. $_, то исходный список также будет модифицирован. Функции обработки ассоциативных массивов Как известно, ассоциативные массивы - это такие массивы, у которых индексом является не числовая величина, а, например, имя. В языке Perl имеется несколько встроенных функций, которые упрощают обработку скриптами ассоциативных массивов. ФУНКЦИЯ KEYS Функция keys возвращает значения ключей, которые отвечают ассоциативному массиву. Она имеет следующий формат: @key_list = keys(%Array);Функция keys возвращает массив ключей в виде регулярного списка. Следующий фрагмент программы иллюстрирует использование функции keys: $ages{'Bob'} = 25; $ages{'Mary'} = 30; $ages{'Zack'} = 15; @list = keys(%ages); # @list будет 'Zack', 'Bob', 'Mary' @list = sort keys %ages # @ list 'Bob', 'Mary', 'Zack' For $key (sort keys %ages) { Print "$key is $ages{$key}\n" }ФУНКЦИЯ VALUES Функция values возвращает обычный массив, состоящий из значений ассоциативного массива. Она имеет следующий формат: @value_list = values(%Array)Функция values возвращает массив значений ассоциативного массива в виде регулярного списка. Следующий фрагмент программы иллюстрирует использование функции values: # Используем значения из предыдущего примера %ages = ('Bob', 25, 'Mary', 30, 'Zack', 15); @list = sort values %ages; # @list (15, 25, 30) @list = %ages; # @list ('Zack', 15, 'Bob', 25, 'Mary', 30)ФУНКЦИЯ EACH Функция each осуществляет итерации элементов в ассоциативном массиве. Она имеет следующий формат: @key_values = each(%Array);Всякий раз, когда скрипт вызывает функцию each, она возвращает список из двух компонент, которые содержат пару ключ-значение. Когда функция достигает конца списка, она возвращает пустой список. При следующем вызове функции процесс итерации начнется сначала. Следующий фрагмент программы иллюстрирует использование функции each: # Используем значения из предыдущего примера %ages = ('Bob', 25, 'Mary', 30, 'Zack', 15); While (($name, $age) = each %ages) { # Выведем ages Print "$key is $ages{$key}\n"; }ФУНКЦИЯ DELETE Функция delete удаляет элементы ассоциативного массива. Она имеет следующий формат: Delete $Array{Key}Следующая инструкция использует функцию delete для того, чтобы удалить элемент, отвечающий ключу Bob из ассоциативного массива $Employees: Delete $Employees{'Bob'}
Date: 2016-07-25; view: 476; Нарушение авторских прав |