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