П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 4096 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6757 раз(а).

Учебник HTML.
Просмотров 3717 раз(а).

Руководство по PHP5.
Просмотров 5991 раз(а).

Хостинг через призму DNS.
Просмотров 4809 раз(а).

Подборка текстов стандартных документов.
Просмотров 56244 раз(а).

Учебник PHP - Самоучитель
Просмотров 3702 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 8335 раз(а).

Внешние атаки...
Просмотров 4563 раз(а).

Учебник PHP.
Просмотров 3172 раз(а).

SSI в примерах.
Просмотров 175 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Глава 5: Хеши.
5.4 Хеш-функции

В этом разделе перечислены некоторые функции, предназначенные для обработки хешей.

Функция keys

Функция keys( %имя_хеша ) выдает список всех текущих ключей, имеющихся в хеше %имя_хеша. Другими словами, применение этой функции эквивалентно возвращению всех элементов списка с нечетными номерами (первый, третий, пятый и т.д.) путем развертывания хеша %имя_хеша в списочном контексте, причем функция keys возвращает их именно в этом порядке. Если элементы в хеше отсутствуют, функция keys возвращает пустой список.

Применим эту функцию к хешу из предыдущих примеров:

$fred("aaa") = "bbb";
$fred(234.5) = 456.7;

@list = keys(%fred); # @list получает значение ("ааа",234.5)
                     # или (234.5, "ааа")

Как и во всех остальных встроенных функциях, круглые скобки не обязательны: функция keys %fred полностью идентична keys (%fred).

foreach $key (keys (%fred)) { # однократно для каждого значения хеша %fred
  print "at $key we have $fred{$key}\n"; # показать ключ и значение
}

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

* Можно, в принципе, с помощью среза, но здесь о срезах мы не говорим.

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

if (keys(%xeni)) { # если keys() не равно 0:
    ...; # массив не пустой 
} # ... или ...

while (keys(%xem) < 10) {
  . . .; # продолжать цикл, пока меньше 10 элементов
}

Для того чтобы узнать, пуст хеш или нет, нужно просто использовать функцию %хеш в скалярном контексте:

if (%хеш) { # если "истина", в нем что-то есть
  # что-то сделать
}

Функция values

Функция values (%имя_массива) возвращает список всех текущих значений указанного массива в том же порядке, в каком функция keys (%имя_массива) возвращает ключи. Как всегда, круглые скобки не обязательны. Например:

%lastname =0; # сделать %lastname пустым
$1astname("fred") = "flintstone";
$1astname("barney") = "rubble";
$1astnames = values(tiastname); # получить значения

Массив@lastnames будет содержать либо значения("flintstone", "rubble"), либо("rubble", "flintstone").

Функция each

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

Например, чтобы пройти по хешу %lastname из предыдущего примера, нужно использовать нечто такое:

while ( ($first,$1ast) = each(%lastname)) {
  print "The last name of $first is $1ast\n";
}

Присваивание нового значения всему хешу заставляет функцию each перейти в его начало. Добавление элементов в хеш и удаление из него элементов в ходе выполнения цикла вполне может "запутать" функцию each (и вас, наверное, тоже).

Функция delete

Итак, вы можете добавлять элементы в хеш, но пока не можете удалять их (кроме как путем присваивания нового значения всему хешу). Для удаления элементов хеша в Perl используется функция delete. Операнд этой функции — хеш-ссылка, аналогичная той, которая используется для извлечения конкретного значения из хеша. Perl удаляет из хеша соответствующую ссылке пару ключ-значение. Например:

%fred = ("aaa","bbb",234.5,34.56); # добавить в %fred два элемента

delete $fred("aaa"}; # теперь в хеше %fred только одна пара ключ-значение

Назад | Вперед
Содержание (общее) | Содержание раздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru