Анимация
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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242

3.11. Программа: hopdelta 113

printf %3ci%s , Snumber, Schar if Snumbei $char eq s,

Sender Recipient Time Delta

Start wall.org 09:17:12 1998/05/23 44s 3m

wall.org mail.brainstorm.net 09:20:56 1998/05/23

mail.brainstorm.net jhereg.perl.com 09:20:58 1998/05/23 2s



Массивы

я считаю, что произведения искусства - единственные объекты материсшьпой Вселенной, обладающие внутренним порядком.

И потому, не веря в высшую ценность искусства, я все же верю в Искусство ради Искусства.

Э. М. Фостер

Введение

Если попросить вас перечислить содержимое своих карма]10в, назвать имена трех последних президентов объяснить, как npoiiTH к нужиому месту, в jho6om случае получится chiicok: вы называете объекты один за другим в определенном порядке. Списки являются частью нашего мировоззрения. Мощные примитивы Perl для работы со списками и массивами помогают преобразовать мировоззрение в программный код.

Терлншы список (list) и массив (array) трактуются в этой главе в соответствии с канонами Perl. Например, ("Reagan , "Bush", "Clinton") - это сиисоктрех последних американских президентов. Чтобы сохранить его в переменной, воспользуйтесь л<дссмвол«; @р residents = ("Reagan", "Bush", "Clinton"). Каждый из этих терминов относится к упорядоченной совокупности скалярных величин; отличие состоит в том, что массив представляет собой имепова1Н1ую переменную, размер которой можно непосредстве1ню измишть, а список является скорее отвлеченным понятием. Можно рассматривать массив как переменную, а список - как содержащиеся в ней значе1пгя.

Отличие может показаться надуманным, но операции, изменяющие размер этой совокупности (например, push или pop), работают с массивом, а не списком. Нечто похожее происходит с $а и 4: в программе можно написать $а++, но не 4++. Аналогично, рор(@а) - допустимо, а рор( 1, 2, 3) - нет.

Главное - помнить, что списки и массивы в Perl представляют собой упорядоченные совокупности скалярных величин. Операторы и функции, работающие со списками и массивами, обеспечивают более быстрый или удобный доступ к элементам по сравнению с ручным извлечением. Поскольку размер массива изменяется не так уж часто, термины «массив» и «список» обычно можно считать синонимами.



4.1. Определение списка в программе 115

Вложенные списки ие создаются простым вложе1И1ем скобок. В Perl следующие строки эквивалентны:

(anested = (this , that , "the", order), nested = ("this, "that", (the, order)),

Почему Perl не поддерживает вложенные списки напрямую? Отчасти по историческим причинам, 1ю также и пото.му, что это позволяет многим опе])ациям (типа р rint или sort) работать со снискамп произвольной длины и произвольного содержания.

Что делать, если требуется более сложная структура да1И1ых - например, массив массивов или массив хэшей? Всномпитс, что скалярные переменные могут хранить не только числа пли строки, по и ссылки. Сложные (многоуровневые) структуры данных в Perl всегда образуются с помощью ссылок. Следовательно, «двумерные масс1шы» или «массивы массивов» в де11ствительности реализуются как массив ссылок па массивы - по апа;югии с двумерными массивами С, которые могут представлять собой массивы указателей па массивы.

Для большинства рецептов этой главы содержимое массивов пссуществеиио. Например, проблема слия1И1Я двух массивов решается одинаково для массивов строк, чисел или ссылок. Решения некоторых проблем, связанных с содержимым массивов, приведены в главе 11 «Ссылки и записи». Рецепты этой главы orpaim-чиваются обычными массивами.

Давайте введем еще несколько терм1П1ов. Скалярные величн]1ы, входящие в массив или список, называются элементами. Для обращения к элементу используется его позиция, или индекс. И]1дексация в Perl начинается с О, поэтому в следующем списке:

@tune = (The, Star-Spangled, Banner );

элемент "The находится в первой позиции, но для обращения к нему используется индекс 0: $tune[0]. Это объясняется как извращенностью компьютерной логики, где нумерация обычно начинается с О, так и извращенностью разработчиков языка, которые выбрали О как смещение внутри массива, а ие порядковый номер элемента.

4.1. Определение списка в программе

Проблема

Требуется включить в программу список - например, при иниц]1ализации массива.

Решение

Перечислите элементы, разделяя их занятыми:

@а = ("quick", "brown", fox").

При большом количестве однословных элементов воспользуйтесь оператором qw():

@а = qw(Why are you teasing me"?);



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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242