Массив в 1С — это набор некоторых значений. Значения в одном массиве могут быть различных типов.
Массив может быть получен в результате выполнения различных функций, например, ВыгрузитьКолонку() таблицы значений; в виде массива можно получить выделенные строки динамического списка и т.д. Можно создать массив и «вручную».
Создание массива
1. Как создать массив нужного размера
//Внесем значения элементов массива
пМассив[0] = "Мы";
пМассив[1] = "создали";
пМассив[2] = "новый";
пМассив[3] = "массив";
2. Как создать пустой массив и добавить в него элементы
//Внесем значения элементов массива
пМассив.Добавить("Мы");
пМассив.Добавить("создали");
пМассив.Добавить("новый");
пМассив.Добавить("массив");
3. Как создать многомерный массив.
Рассмотрим этот вопрос на примере двумерного массива, так как массивы больших размерностей используются значительно реже, а механизм их работы не отличается от двумерного.
//Внесем значения элементов массива, пронумеровав каждое слово
пМассив[0][0] = "1. ";
пМассив[0][1] = "Мы";
пМассив[1][0] = "2. ";
пМассив[1][1] = "создали";
пМассив[2][0] = "3. ";
пМассив[2][1] = "многомерный";
пМассив[3][0] = "4. ";
пМассив[3][1] = "массив";
4. Как создать фиксированный массив
Фиксированный массив отличается от обычного тем, что его нельзя изменять. Нельзя добавлять, удалять или менять значения элементов такого массива.
Фиксированный массив может быть получен из обычного:
пМассив.Добавить("Мы");
пМассив.Добавить("создали");
пМассив.Добавить("новый");
пМассив.Добавить("массив");
фМассив = новый ФиксированныйМассив(пМассив); // создали фиксированный массив
Функции работы с массивами
Работу функций будем рассматривать на примере одномерного массива пМассив, созданного выше и состоящего из 4 элементов:
- «Мы»
- «создали»
- «новый»
- «массив».
Функция ВГраница()
Получает наибольший индекс элемента массива. Он всегда на единицу меньше количества элементов массива.
Функция Вставить()
Вставляет какое-то значение в элемент массива с указанным индексом. Последующие элементы массива сдвигаются
Функция Добавить()
Создает новый элемент в конце массива и вставляет туда заданное значение
Функция Количество()
Возвращает количество элементов массива.
Функция Найти()
Ищет в массиве заданный элемент. Если находит, возвращает его индекс. Если не находит, возвращает Неопределено.
Индекс = пМассив.Найти("строка, которой не было"); // Неопределено
Функция Очистить()
Удаляет все значения из массива.
Функция Получить()
Получает значение массива по индексу. Эту же задачу можно решить через [].
Значение=пМассив[3]; // "массив"
Функция Удалить()
Удаляет элемент массива по индексу
Функция Установить()
Устанавливает значение элемента массива по индексу. Работает аналогично [].
пМассив[3]="массив!";
Как обойти массив
Можно обойти все элементы массива без указания индекса:
Сообщить(ЭлементМассива);
КонецЦикла;
Можно при обходе использовать индекс:
Сообщить(пМассив[Индекс]);
КонецЦикла;
Как обойти многомерный массив
Многомерный массив обходится с помощью тех же циклов (см. выше), но один цикл должен быть вложен в другой.
Для каждого Элемент1 из мМассив Цикл
Для каждого Элемент2 из Элемент1 Цикл
Сообщить(Элемент1);
КонецЦикла;
КонецЦикла;
Или с применением индексов.
Для Индекс1=0 по мМассив.ВГраница() Цикл
Для Индекс2 по мМассив[Индекс1].ВГраница() Цикл
Сообщить(мМассив[Индекс1][Индекс2]);
КонецЦикла;
КонецЦикла;
Сортировка массива
Для сортировки массива нам потребуется вспомогательный объект с типом СписокЗначений.
СписокЗнач.ЗагрузитьЗначения(пМассив); // загружаем в список значения из массива
СписокЗнач.СортироватьПоЗначению(НаправлениеСортировки.Возр); //сортируем по возрастанию
СписокЗнач.СортироватьПоЗначению(НаправлениеСортировки.Убыв); //или по убыванию
пМассив=СписокЗнач.Выгрузить(); // выгружаем отсортированные значения обратно в массив
Сравнение двух массивов
Перед тем, как перейти к описанию функции сравнения, договоримся, что массивы считаются идентичными, если имеют одинаковое количество элементов и соответствующие элементы массивов равны. Тогда для сравнения можно использовать следующую функцию (кстати, такая функция уже присутствует в некоторых типовых конфигурациях):
Если Массив1.Количество()<>Массив2.Количество() Тогда
Возврат ЛОЖЬ; // Массивы не равны, сравнивать элементы нет смысла.
КонецЕсли;
Для Индекс=0 по Массив1.ВГраница() Цикл
Если Массив1[Индекс]<>Массив2[Индекс] Тогда
Возврат Ложь; //эти элементы не равны, значит и массивы не равны
КонецЕсли;
КонецЦикла;
Возврат Истина; // Если дошли до сюда, то массивы равны
КонецФункции
В функцию нужно передать 2 сравниваемых массива. Функция возвращает значение Истина, если массивы равны, и Ложь, если не равны.