Массивы. Создание массивов, заполнение данными, обращения к элементам и другие операции с массивами — различия между версиями
Тест (обсуждение | вклад) м (→Массивы : Вычисление индекса, запись и извлечение элементов из массива) |
Тест (обсуждение | вклад) м (→Квадратные скобки) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 93: | Строка 93: | ||
Теперь надо сказать несколько слов о том, как простое добавление квадратных скобок превращает любой тип в тип задающий массив элементов этого типа. Например, создадим переменные подходящие для хранения массивов целых чисел и строк: | Теперь надо сказать несколько слов о том, как простое добавление квадратных скобок превращает любой тип в тип задающий массив элементов этого типа. Например, создадим переменные подходящие для хранения массивов целых чисел и строк: | ||
− | Перем мЦ тип Целое[] = Неопределено //переменной мЦ нельзя присвоить целое число, но можно присвоить массив целых чисел, т.к. тип Целое[ ] это тип массива целых чисел | + | '''Перем''' мЦ тип Целое[] = Неопределено //переменной мЦ нельзя присвоить целое число, но можно присвоить массив целых чисел, т.к. тип Целое[ ] это тип массива целых чисел |
− | Перем мС тип Строка[] = Неопределено //переменной мС нельзя присвоить строку, но можно присвоить массив строк, т.к. тип Строка[ ] это тип массива строк | + | '''Перем''' мС тип Строка[] = Неопределено //переменной мС нельзя присвоить строку, но можно присвоить массив строк, т.к. тип Строка[ ] это тип массива строк |
Точно так же задаются типы параметрам процедуры, если в параметр надо передать массив элементов определенного типа: | Точно так же задаются типы параметрам процедуры, если в параметр надо передать массив элементов определенного типа: | ||
− | Процедура МояПроцедура( МассивДокументов тип ТекстовыйДокумент[] ) //квадратные скобки тут обязательны, т.к. мы хотим передать массив документов, а не один документ | + | '''Процедура''' МояПроцедура( МассивДокументов '''тип''' ТекстовыйДокумент[] ) //квадратные скобки тут обязательны, т.к. мы хотим передать массив документов, а не один документ |
//.... | //.... | ||
− | КонецПроцедуры | + | '''КонецПроцедуры''' |
− | '''Умнику на заметку''': Существуют многомерные массивы, для обращения к элементам которых необходимо указывать несколько индексов, один индекс для каждого измерения. Например, МАС[3, 5] имеет 4 * 6 = 24 элемента. Для создания типа многомерного массива в квадратных скобках необходимо указывать соответствующее количество запятых, например, тип двухмерного массива целых чисел объявляется так: Целое[ , ]. Многомерные массивы будут рассмотрены в другой статье. | + | '''Умнику на заметку''': Существуют многомерные массивы, для обращения к элементам которых необходимо указывать несколько индексов, один индекс для каждого измерения. Например, МАС[3, 5] имеет 4 * 6 = 24 элемента. Для создания типа многомерного массива в квадратных скобках необходимо указывать соответствующее количество запятых, например, тип двухмерного массива целых чисел объявляется так: Целое[ , ]. [[Многомерные массивы]] будут рассмотрены в другой статье. |
Заполнить массив данными можно как в цикле (пример выше), так и с помощью инициализатора. Причем инициализатор может заполнить существующий массив или создать новый: | Заполнить массив данными можно как в цикле (пример выше), так и с помощью инициализатора. Причем инициализатор может заполнить существующий массив или создать новый: | ||
− | Массив масЧисла[9] тип Целое | + | '''Массив''' масЧисла[9] тип Целое |
масЧисла{0,1,2,3,4,5,6,7,8,9} //заполняем существующий массив | масЧисла{0,1,2,3,4,5,6,7,8,9} //заполняем существующий массив | ||
масДниНедели = {"Пн","Вт","Ср","Чт","Пт","Сб","Вс"} //создали новый Массив строк | масДниНедели = {"Пн","Вт","Ср","Чт","Пт","Сб","Вс"} //создали новый Массив строк | ||
Строка 138: | Строка 138: | ||
На этом пока все. Успехов в работе с массивами. | На этом пока все. Успехов в работе с массивами. | ||
+ | |||
+ | == См. также == | ||
+ | * [[Многомерные массивы]] | ||
{{Описание языка Перфолента.NET-Содержание}} | {{Описание языка Перфолента.NET-Содержание}} |
Текущая версия на 16:22, 2 декабря 2021
Массивы данных используются в программировании повсеместно. В языке программирования Перфолента существуют богатые возможности для операций с массивами. В этой статье рассматриваются основные приемы работы с массивами и синтаксис операций с ними.
Содержание
- 1 Теоретическая часть
- 2 Объявление и использование Массива
- 3 Структурные и ссылочные типы данных в Массивах
- 4 Массивы : Вычисление индекса, запись и извлечение элементов из массива
- 5 Массивы. Оператор "Новый"
- 6 Квадратные скобки
- 7 См. также
- 8 Синтаксис языка Перфолента
- 9 Практика программирования на языке Перфолента
- 10 Ссылки
Теоретическая часть
В языке программирования Перфолента.Net, как и во многих других языках, существуют встроенные в язык массивы.
В языке 1С версии 8, в отличие от 1С версии 7.7 массивы как часть языка отсутствуют (не считая коллекции с таким же названием). Поэтому многим программистам 1С будет не лишним ознакомиться с синтаксисом и приемами работы с массивами.
Массив — это набор данных одного типа. Например, массив целых чисел, массив строк, массив дат и т.д.
К элементам данных входящих в массив можно обращаться по индексу (индекс указывает позицию элемента начиная с нуля).
Важно: Существуют понятия нумерация и индексация.
- Нумерация начинается с единицы, а индексация начинается с нуля.
- Индекс элемента на единицу меньше, чем его номер.
Объявление и использование Массива
Для объявления массива в языке программирования Перфолента существует оператор Массив. Выглядит это так:
Массив А[99] тип Целое
В этом примере мы создали 100 (а не 99) элементов типа Целое, т.к. существует элемент с индексом 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 //спойлер для зануды++ компилятор собирает значения последовательно, преобразовывая их в тип самого левого значения. Поэтому + тут не сложение, а конкатенация (склеивание текстовых строк т.е. "Вася" + "0" + "1"), т.к. мы имеем дело с 1С, а не с VB, где это разные операторы. Поэтому без скобок получим не ошибку компиляции, а Вася01, Вася11, Вася21, Вася31 -- КонецЦикла
Итак, мы уже можем создать массив из любого количества элементов любого типа, а также записывать в массив значения и читать их из массива. Для многих задач этого более чем достаточно. Но мы пойдем дальше, т.к. тема массивов в языке Перфолента далеко не исчерпана.
Массивы. Оператор "Новый"
Иногда нам необходимо создать массив на лету, например, для передачи его в качестве параметра в процедуру или функцию, или для присвоения переменной. Для этого можно использовать оператор Новый, так же, как и при создании объектов другого типа:
мас = Новый Целое[99]
Вместо типа Целое в этом примере мог бы быть любой другой тип, даже тип ТекстовыйДокумент.
МояПроцедура(Новый ТекстовыйДокумент[99]) //передаём в процедуру новый массив со 100 (=99+1) элементами типа ТекстовыйДокумент в процедуру
Квадратные скобки
Теперь надо сказать несколько слов о том, как простое добавление квадратных скобок превращает любой тип в тип задающий массив элементов этого типа. Например, создадим переменные подходящие для хранения массивов целых чисел и строк:
Перем мЦ тип Целое[] = Неопределено //переменной мЦ нельзя присвоить целое число, но можно присвоить массив целых чисел, т.к. тип Целое[ ] это тип массива целых чисел
Перем мС тип Строка[] = Неопределено //переменной мС нельзя присвоить строку, но можно присвоить массив строк, т.к. тип Строка[ ] это тип массива строк
Точно так же задаются типы параметрам процедуры, если в параметр надо передать массив элементов определенного типа:
Процедура МояПроцедура( МассивДокументов тип ТекстовыйДокумент[] ) //квадратные скобки тут обязательны, т.к. мы хотим передать массив документов, а не один документ //.... КонецПроцедуры
Умнику на заметку: Существуют многомерные массивы, для обращения к элементам которых необходимо указывать несколько индексов, один индекс для каждого измерения. Например, МАС[3, 5] имеет 4 * 6 = 24 элемента. Для создания типа многомерного массива в квадратных скобках необходимо указывать соответствующее количество запятых, например, тип двухмерного массива целых чисел объявляется так: Целое[ , ]. Многомерные массивы будут рассмотрены в другой статье.
Заполнить массив данными можно как в цикле (пример выше), так и с помощью инициализатора. Причем инициализатор может заполнить существующий массив или создать новый:
Массив масЧисла[9] тип Целое масЧисла{0,1,2,3,4,5,6,7,8,9} //заполняем существующий массив масДниНедели = {"Пн","Вт","Ср","Чт","Пт","Сб","Вс"} //создали новый Массив строк
И, на конец, массивы можно изменять, удалять, очищать используя специальные операторы:
//пересоздание массива с новым размером //содержимое массива пропадает мСтр[0]="Определено!" МассивНовый мСтр[2] //изменение размера массива //содержимое сохраняется до верхней границы нового размера мСтр[0]="Элементы сохранились при изменении размера массива..." МассивИзменить мСтр[1] //Очистка массива //Элементам устанавливаются значения по умолчанию для заданного типа элементов МассивОчистить мСтр, масИниЦел2М //Удаление массива //Переменной массива присваивается значение Неопределено МассивУдалить мСтр, масИниЦел2М
Массивы являются перечисляемыми объектами, поэтому можно перебирать все элементы с помощью цикла Для Каждого:
Для Каждого Эл Из масДниНедели ВыводСтроки Эл //в переменную Эл по очереди попадают все элементы массива КонецЦикла
На этом пока все. Успехов в работе с массивами.
См. также
Синтаксис языка Перфолента
2.1 Переменные. Объявление переменных, инициализация и их использование
2.2 Типы данных в языке Перфолента
2.3 Массивы. Создание массивов, заполнение данными, обращения к элементам и другие операции с массивами
2.4 Структура программы на языке Перфолента.Net
2.7 Оператор условного выбора блока кода Выбор Для
2.8 Функции и процедуры в языке Перфолента
2.9 Оператор Попытка. Структурная обработка ошибок
2.10 Работа с файлами
2.11 Директивы препроцессора. Выполнение действий перед компиляцией
Практика программирования на языке Перфолента
3.1. Многозадачность и многопоточность в языке Перфолента.Net