Массивы. Создание массивов, заполнение данными, обращения к элементам и другие операции с массивами.
Массивы данных используются в программировании повсеместно. В языке программирования Перфолента существуют богатые возможности для операций с массивами. В этой статье рассматриваются основные приемы работы с массивами и синтаксис операций с ними.
В языке программирования Перфолента.Net, как и во многих других языках, существуют встроенные в язык массивы.
В языке 1С версии 8, в отличие от 1С версии 7.7 массивы как часть языка отсутствуют (не считая коллекции с таким же названием). Поэтому многим программистам 1С будет не лишним ознакомиться с синтаксисом и приемами работы с массивами.
Массив — это набор данных одного типа. Например, массив целых чисел, массив строк, массив дат и т.д.
К элементам данных входящих в массив можно обращаться по индексу (индекс указывает позицию элемента начиная с нуля).
Умнику на заметку: Существуют понятия нумерация и индексация. Нумерация начинается с единицы, а индексация начинается с нуля. Индекс элемента на единицу меньше, чем его номер.
Для объявления массива в языке программирования Перфолента существует оператор Массив (странно, если бы он назывался иначе). Выглядит это так:
Массив А[9] тип Целое
В этом примере мы создали 10 (а не 9) элементов типа Целое, т.к. существует элемент с индексом 0, к которому мы можем обратиться так А[0]. Это значит, что при создании массива мы указываем верхний индекс, а не количество элементов, как в некоторых других языках программирования. Если вы случайно укажете количество элементов, то ничего страшного не произойдет, у вас просто будет одно лишнее место в массиве.
Умнику на заметку: К моменту объявления имя массива не должно быть занято.
В одном операторе мы можем создать несколько массивов одного типа:
Массив Фамилии[99], Имена[99],
Отчества[99] тип
Строка
Мы так же можем задать элементам массива начальное значение, указав его после знака равно:
Массив А[5] тип Целое = 1
В результате в массиве будет 6 единиц. Проверим это:
ВыводСтроки А.Представление
Получилось: 1 1 1 1 1 1
Как и в случае с переменными, тип массива можно не указывать, если указано значение инициализации (в данном случае единица). Так как все элементы массива имеют одинаковый тип, то тип значения инициализации становится типом массива:
Массив А[5] = 1 //массив получит тип Целое
Массив ФИО[99]
= "" //массив
получит тип Строка
Умнику на заметку: т.к. существуют значения структурного и ссылочного типов, то надо помнить об этом при инициализации массивов. Понятно, что все элементы массива структурного типа будут содержать собственные копии значения. А вот элементы массива ссылочного типа могут содержать ссылки на один и тот же объект или на разные, в зависимости от инициализирующего выражения. Надо просто помнить, что инициализирующее выражение вычисляется столько раз, сколько элементов в создаваемом массиве. Подробнее о структурных и ссылочных типах можно прочитать здесь: Переменные. Объявление переменных, инициализация и их использование..
Т = Новый ТекстовыйДокумент //создали один экземпляр текстового документа
Массив АА[9] =
Т //все элементы массива получат ссылку на один и тот
же единственный экземпляр объекта ТекстовыйДокумент
Массив ББ[9] = Новый ТекстовыйДокумент //каждый
элемент массива получит ссылку на собственный экземпляр объекта ТекстовыйДокумент,
которых будет создано 10 штук
При создании массива можно задавать верхний индекс массива с помощью переменной или любого выражения, возвращающего целое число:
ВерхнийИндекс = 9
Массив Б[ВерхнийИндекс] = 0
КоличествоЭлементов = 10
Массив В[КоличествоЭлементов - 1] = 0
Обращаться к элементам массива так же можно при помощи переменной или выражения в качестве индекса. Элементы можно читать и записывать. Например, обойдем массив в цикле, выведем на экран значение каждого элемента и заменим его другим значением.
Массив МА[3] = "Вася" //все элементы получат значение Вася
Для Инд = 0 По 3
ВыводСтроки МА[Инд] //выведет слово Вася 4 раза
МА[Инд] = МА[Инд] + (Инд + 1)
//вопрос зануды: "А что будет, если убрать
круглые скобки?)
ВыводСтроки МА[Инд] //выведет Вася1, Вася2, Вася3, Вася4
КонецЦикла
Итак, мы уже можем создать массив из любого количества элементов любого типа, а также записывать в массив значения и читать их из массива. Для многих задач этого более чем достаточно. Но мы пойдем дальше, т.к. тема массивов в языке Перфолента далеко не исчерпана.
Иногда нам необходимо создать массив на лету, например, для передачи его в качестве параметра в процедуру или функцию, или для присвоения переменной. Для этого можно использовать оператор Новый, так же, как и при создании объектов другого типа:
мас = Новый Целое[99]
Вместо типа Целое в этом примере мог бы быть любой другой тип, даже ТекстовыйДокумент.
МояПроцедура(Новый ТекстовыйДокумент[99]) //передали
новый Массив в процедуру
Теперь надо сказать несколько слов о том, как простое добавление квадратных скобок превращает любой тип в тип задающий массив элементов этого типа. Например, создадим переменные подходящие для хранения массивов целых чисел и строк:
Перем мЦ тип Целое[] =
Неопределено //переменной
мЦ нельзя присвоить целое число, но можно присвоить массив целых чисел, т.к.
тип Целое[ ]
это тип массива целых чисел
Перем мС тип Строка[] =
Неопределено //переменной
мС нельзя присвоить строку, но можно присвоить массив строк, т.к. тип Строка[ ] это тип массива строк
Точно так же задаются типы параметрам процедуры, если в параметр надо передать массив элементов определенного типа:
Процедура МояПроцедура( МассивДокументов тип ТекстовыйДокумент[]
) //квадратные скобки тут обязательны, т.к. мы хотим
передать массив документов, а не один документ
//....
КонецПроцедуры
Умнику на заметку: Существуют многомерные массивы, для обращения к элементам которых необходимо указывать несколько индексов, один индекс для каждого измерения. Например, МАС[3, 5] имеет 4 * 6 = 24 элемента. Для создания типа многомерного массива в квадратных скобках необходимо указывать соответствующее количество запятых, например, тип двухмерного массива целых чисел объявляется так: Целое[ , ]. Многомерные массивы будут рассмотрены в другой статье.
Заполнить массив данными можно как в цикле (пример выше), так и с помощью инициализатора. Причем инициализатор может заполнить существующий массив или создать новый:
Массив масЧисла[9] тип Целое
масЧисла{0,1,2,3,4,5,6,7,8,9} //заполняем существующий массив
масДниНедели = {"Пн","Вт","Ср","Чт","Пт","Сб","Вс"}
//создали новый Массив строк
Действия с массивами.
Массивы можно пересоздавать, изменять, удалять и очищать используя специальные операторы:
//пересоздание массива с новым
размером
//содержимое массива пропадает
мСтр[0]="Определено!"
МассивНовый мСтр[2]
//изменение размера массива
//содержимое сохраняется до верхней границы нового
размера
мСтр[0]="Элементы
сохранились при изменении размера массива..."
МассивИзменить мСтр[1]
//Очистка массива
//Элементам устанавливаются значения по умолчанию для
заданного типа элементов
МассивОчистить мСтр, масИниЦел2М
//Удаление массива
//Переменной массива присваивается значение
Неопределено
МассивУдалить мСтр, масИниЦел2М
Массивы являются перечисляемыми объектами, поэтому можно перебирать все элементы с помощью цикла Для Каждого:
Для Каждого
Эл Из масДниНедели
ВыводСтроки Эл //в переменную Эл по очереди попадают все элементы массива
КонецЦикла
На этом пока все. Успехов в работе с массивами.
Сергей Рогаткин
К началу статьи
Предыдущая статья:
Типы данных в языке Перфолента.
Следующая статья:
Структура программы на языке Перфолента.Net
Вернуться в раздел:
Синтаксис языка Перфолента