Этот дескриптор описывает вектор, состоящий из четырех элементов, виртуальная начальная позиция которого смещена на две позиции памяти (VO + 2 х 1) относительно виртуальной начальной позиции VO массива А и элементы которого разнесены с промежутком, равным трем позициям памяти. Аналогично мы можем представить дескрипторы для сечений В(3.*) и С(3.*.*) (см. рис. 6.6), причем для второго сечения дескриптор будет двухмерным.
Ассоциативныемассивы
Характерной чертой тех массивов, которые мы изучили к настоящему моменту, был метод доступа к отдельным их элементам с помощью перечисляемого типа данных под названием индекс. Элементы массива были упорядочены в соответствии с этим индексом, и доступ к каждому элементу осуществлялся посредством выбора соответствующего значения индекса.
В некоторых приложениях желательно получать доступ к элементам массива по имени без предварительного упорядочения соответствующих индексов. Например, список оценок учеников некоторого класса можно организовать в виде двух массивов, в одном из которых содержатся имена студентов, name[i ], а во втором — полученные ими оценки, grade[i]. В данном случае подразумевается упорядочение по целочисленному индексу 1.
Альтернативный метод заключается в том, чтобы использовать в качестве индекса имя. Поскольку последовательность имен (то есть строк символов) фактически неограниченна, то не существует какого-либо реального неявного перечисления. Вместо этого множество имен используется как множество перечисления. При добавлении нового имени это перечисление увеличивается. Такой массив называется ассоциативным массивом. Ассоциативные массивы в SNOBOL4 называются таблицами и объявляются с помощью ключевого слова tab"\ е, они также играют важную роль в таких языках обработки процессов, как Perl1.
В Perl ассоциативный массив создается при помощи специальной операции, которая обозначается символом %. Так, следующий оператор:
UClassList - ("Michelle". 'A1. "Doris", 'В1, "Michael", 'D');
создает ассоциативный массив из грех элементов. Первый член каждой пары является ключом, а второй — значением. Доступ к ассоциативному массиву £С1 assLi st продемонстрирован в следующем примере:
$ClassList{'Michelle'}; # значение равно А
@y=%ClassList: # Массив у объявляется массивом
# скаляров из 6 элементов for ($i=0: $i<6: $i++){print "I=, $i, $y[$i]\n"};
Печать из цикла for будет выглядеть так:
I=, 0, Doris
I=, 1, В
I=, 2, Michael
I=, 3, D
I=, 4, Michelle
I=, 5, A
Этот пример помогает понять реализацию ассоциативных массивов. Хотя исходный порядок ключей элементов массива был (Michelle, Doris, Michael), при хранении в памяти массив упорядочивается по алфавиту (точнее, в соответствии с алфавитным порядком ключей массива). Это обеспечивает возможность эффективного поиска ключа нужного элемента массива на основе алгоритма двоичного поиска2.
6.1.6. Записи
Структура данных, состоящая из фиксированного количества компонентов различных типов, обычно называется записью.
Спецификация и синтаксис. Записи и векторы являются различными формами линейной структуры данных фиксированных размеров, но записи отличаются от векторов в двух отношениях:
Ассоциативные массивы можно также найти в языке РНР, достаточно широко применяемом для создания серверных сценариев в web-приложениях. — Примеч. науч. ред.
Этот абзац не соответствует действительности. Ассоциативные массивы Perl вообще никак не упорядочиваются при хранении, более того, нельзя даже предугадать их порядок, так как для вычисления адреса области памяти элемента используется хэш-функция. Чтобы получить упорядоченный набор ключей, следует использовать функцию сортировки: @y=sort(keys (Ш assLi St)):. — Примеч. науч. ред.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.