Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [ 16 ] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122


4-й час

Укладка строительных блоков: списки и массивы

Скаляры Perl - существительные в единственном числе. Они могут представлять только один объект - слово, запись, документ, строку текста или символ. Однако иногда требуется оперировать целыми коллекциями объектов - набором слов, совокупностью записей, несколькими документами, 50 строками текста или десятками символов.

Множества объектов в Perl реализованы с помощью списков данных. Списки данных могут быть представлены тремя способами: с использованием простых списков, массивов и ассоциативных массивов.

Списки являются простейшей формой представления множества данных, по сути - это просто группа скаляров. Список представляет собой последовательность имен скаляров, разделенных запятыми. Вся последовательность заключена в круглые скобки. Например (2, 5, $а, "Bob") - список, состоящий из двух чисел, перемеппой $а и слов Ь". Каждый отдельный скаляр называется элементом списка. Как и следовало ожидать, списки могут содержать произвольное количество элементов. Поскольку списки представляют собой коллекции скаляров, а скаляры также могут быть сколь угодно велики, то и списки могут быть довольно внушительных размеров.

Для хранения списка в виде переменной используется массив. Имена переменных-массивов в Perl подчиняются тем же правилам, что и имена остальных переменных, по начинаются с символа 9, Например, eFOO - допустимое имя переменной-массива в Perl. Имена скаляров и массивов могут совпадать, например $naraes и fnames - совершенно различные переменные. Первая обозначает скаляр, а вторая - массив. Они вообще могут не иметь никакого отношения друг к другу.

Индивидуальные скаляры, входящие в массив, называются элементами массива. На элементы массива можно ссылаться с помощью их положения в массиве - так называемого индекса (например, можно сослаться на третий элемент массива SFOO, пятый элемент массива inames и т. д.).

В Perl существует и еще один вид списков - хэш, или ассоциативный массив, который имеет много общего с обычным массивом. Нодробнее об ассоциативных массивах речь пойдет на 7-м занятии, "Хэши".

Основные темы этого занятия.



• Как заполнить пустой массив.

• Как поэлементно проверить массив.

• Как отсортировать и распечатать массив.

• Как преобразовать скаляры в массивы и как выполнить обратное преобразование.

Помещение скаляров в список или массив

Создать список литералов очень просто - достаточно заключить в скобки набор скалярных значений. Например:

(5, яблоко, $х, 3.14159)

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

яблоко, скалярную переменную $х и число я. Если список должен состоять только из обычных строк, можно обойтись без кавычек, для этого в Perl имеется оператор

qw ( sncKu агшсиЕ 45.6 $х )

Здесь создается четырехэлементный список. Каждый элемент может быть отделен

от соседних символом пробела, табуляторами или символом перевода строки. Обратите внимание, что $х является литералом, т.е. строкой $х, а не переменной $х, вместо которой подставляется ее значение. Если элементы списка должны содержать пробелы, то оператор использовать нельзя. Вместо него нужно использовать такую конструкцию:

(яблоки, апельсины, 45.6, $х)

Обратите внимание, что литерал $х заключен в одинарные кавычки. Оператор qw не выполняет интерпретацию элементов списка, похожих на имена переменных, он воспринимает Их буквально. Таким образом, $х не заменяется значением переменной $х, а оставляется в первоначальном виде.

В Peri имеется полезный оператор для работы со списками литералов - оператор диапазона. Оператор диапазона выглядит как пара точек (..). Ниже приведен пример

использования этого оператора:

(1..10)

Оператор диапазона создает список, состоящий из всех целых чисел диапазона, заданного его левым и правым операндами (в нашем примере список будет состоять из

целых чисел от 1 до 10 включительно). Если в списке должны быть представлены несколько диапазонов - используйте несколько операторов:

(1.-10, 20..30);

В этом примере создается список из 21 элемента: целые числа от 1 до 10 и от 20 до 30 включительно. Если правый операнд оператора диапазона меньше, чем левый, как в создается пустой список.

Оператор диапазона можно применять не только к числам, но и к строкам. Диапазон (a..z) создает список, состоящий из 26 строчных букв.. Диапазон (aa..zz) создает куда более длинный список, состоящий из 675 буквенных пар, начинающийся с аа, аЬ, ad и заканчивающийся zx, zy, zz.

66 I. cEi Perl



Массивы

Списки литералов обычно используются для инициализации некоторых других

структур, таких как массив или хэши. Для того чтобы создать в Perl массив, достаточно что-нибудь поместить в него. В отличие от других языков программирования, массив не нужно заранее объявлять и указывать его размерность. Создать новый массив и поместить в него элементы можно следующим образом:

*boys=qw { Гриша тя Ecj );

В этом примере инициализации массива используется оператор присваивания. Следует отметить, что оператор = применяется для присваивания значения как скалярам, так и массивам. После выполнения этого кода массив 8boys будет содержать три элемента: Гриша, Петя и Борис. Обратите внимание на использование оператора qw, избавляющего от необходимости набирать шесть кавычек и две запятые. В присваивании значения элементам массива могут участвовать другие массивы и даже пустые списки:

всору=вог1д1йа1; вс1еап=();

В этом примере все элементы массива копируются в новый массив

Есл ору содержал элементы, они будут потеряны. Второй оператор очищает массив Присваивание переменной пустого списка или пустого массива удаляет все ее элементы.

Если список литералов содержит другие списки, массивы или хэши, эти списки сводятся в один общий список, например:

eboys=qw ( Гриша Петя Борис ); §girls=qw( Him Юн Света ); ekids=(eboys, egirls);

Sfamily={!kids, (Миша, Катя), Алиса);

.. Список {№oys, Sgirls) преобразуется Perl в один простой список имен всех детей (Гриша, Петя и т.д.) перед тем, как его значения присваиваются переменной §kids. В следующей строке кода массив Skids и список (Миша, Катя) сводятся в один длинный список, затем этот список присваивается переменной §family. Первоначальные структуры iboys, Sgirls, gkids и (Миша, "Катя") не будут представлены в окончательном списке там лишь находятся их элементы, такие как Миша и Катя. Это означает, что предыдущий пример создания массива эквивалентен такому оператору присваивания:

Sfaaily=qw( Гриша Петя Борис Наша Юн Света МЬшв Катя Аписа);

Если слева от оператора присваивания находится список имен переменных, эти переменные инициализируются элементами списка. Рассмотрим пример:

($а, $b, $c) бпокй апельсине! бананы);

Здесь переменная инициализируется значением яблоки, - апельсины и $с - бананы. Если в списке слева содержится массив, этот массив "забирает" все возможные значения из правого списка. Например:

манго виноград вишня);



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [ 16 ] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122