Язык программирования Perl



              

Хэши и контекст


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

%hash = $scalar; # то же, что %hash = ($scalar) # defined($hash{$scalar}) будет ложно: значения не было # exists($hash{$scalar}) будет истинно: ключ есть

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

Таблица 6.1. Форматы записи переменных

КонструкцияХранимое значениеОписаниеКонтекст (в левой части присваивания)
@variableсписоквесь массив @variableсписочный
%variableхэшвесь хэш %variableсписочный
$variableскалярпросто скалярная переменнаяскалярный
$variable[$index]скалярэлемент массива @variable, заданный индексом $indexскалярный
@variable[@list]списоксрез массива @variable, заданный списком индексов @listсписочный
@variable[$index]список (из одного элемента)срез массива @variable, заданный списком из одного индекса $indexсписочный
$variable{$key}скалярэлемент хэша %variableскалярный
@variable{@list}список (значений)срез хэша %variable, заданный списком ключей @listсписочный
@variable{$key}список (из одного значения)срез хэша %variable, заданный списком из одного ключа $keyсписочный

Дополнительные сведения о хэшах можно узнать из справочной документации, обратившись к разделу о типах данных:

perldoc perldata

Хэши - это, наверное, самая популярная структура данных при программировании на Perl. Без них не обходится ни одна серьезная программа, ведь их применение делает многие алгоритмы проще, а программу - понятнее. Материал этой лекции показывает, насколько удобно и просто пользоваться хэшами. Особенный интерес представляет возможность хранения в ассоциативных массивах ссылок на другие структуры данных: массивы, хэши, объекты, подпрограммы. Это позволяет создавать сложные динамические структуры данных, о чем будет сказано в лекции 11, посвященной ссылкам.




Содержание  Назад  Вперед