1С массив найти

Программная работа с массивом

Массив — это универсальная коллекция значений, предназначенная для хранения однотипных данных. Элементом массива может быть значение любого типа. В статье рассматривается работа с этим программным объектом.

Создание массива
Добавление элементов в массив
Переопределение значений массива
Чтение значений массива
Поиск элементов массива
Определение количества элементов в массиве
Удаление элементов массива
Выгрузка массива в колонку таблицы значений
Методы работы с массивом в БСП

Массив доступен как на клиенте, так и на сервере. Массивы не хранятся в базе данных и используются для работы с временными наборами данных. Доступ к элементам массива осуществляется по индексу через оператор (первый элемент имеет индекс 0). Также для массива возможен обход посредством оператора Для каждого … Из … Цикл. Имеется возможность организовывать многомерные массивы.

Рассмотрим на примерах работу с этим программным объектом.

Создание массива

// Создание простого массива Мас = Новый Массив(); // Создание массива фиксированной длины Мас = Новый Массив(5); // Создание многомерного массива: массив из 10 элементов, каждый из которых является массивом из 5 элементов Мас = Новый Массив(10, 5);

Добавление элементов в массив

// Добавление элемента в конец массива Мас.Добавить(ЗначениеНовогоЭлемента); // Вставка элемента в индекс 0 Мас.Вставить(0, «Первый»);

Переопределение значений массива

// Элементу с индексом 1 присваивается новое значение Мас = НовоеЗначение; Мас.Установить(1, НовоеЗначение); // Установка значений многомерных массивов Мас = НовоеЗначение;

Чтение значений массива

// Чтение значения элемента с индексом 0 (первого) ЭлементМассива = Мас; ЭлементМассива = Мас.Получить(0); // Чтение значений многомерного массива ЭлементМассива = Мас; // Перебор всех элементов массива Для Каждого ЭлементМассива Из Мас Цикл Сообщить(ЭлементМассива); КонецЦикла;

Поиск элементов массива

ИндексНайденногоЭлемента = Мас.Найти(«ИскомоеЗначение»); Если ИндексНайденногоЭлемента <> Неопределено Тогда // КонецЕсли;

Сортировка массива

Сортировка массива описана в отдельной статье.

Определение количества элементов в массиве

КоличествоЭлементов = Мас.Количество(); // Определение максимального индекса массива. Если массив пустой, то возвращается -1. МаксИндекс = Мас.ВГраница();

Удаление элементов массива

// Удаление элемента с индексом 1 (второго) Мас.Удалить(1); // Удаление всех элементов массива Мас.Очистить();

Выгрузка массива в колонку таблицы значений

// Количество строк таблицы значений должно быть равно количеству элементов массива // Значения из массива загружаются в порядке индексов Таблица.ЗагрузитьКолонку(Мас, «ИмяКолонки»);

Методы работы с массивом в БСП

В Библиотеке стандартных подсистем предусмотрено несколько функций для обработки массивов:

// Удаляет повторяющиеся элементы массива Взаимодействия.УдалитьПовторяющиесяЭлементыМассива(Массив, НеИспользоватьНеопределено = Ложь); // Вычитает один массив элементов из другого массива. Возвращает результат вычитания. ОбщегоНазначенияКлиентСервер.СократитьМассив(Массив, МассивВычитания); // Удаляет повторяющиеся элементы массива ОбщегоНазначенияКлиентСервер.СвернутьМассив(Массив); // Создает копию значения типа Массив ОбщегоНазначенияКлиентСервер.СкопироватьМассив(МассивИсточник);

Массив в 1С — это набор некоторых значений. Значения в одном массиве могут быть различных типов.

Массив может быть получен в результате выполнения различных функций, например, ВыгрузитьКолонку() таблицы значений; в виде массива можно получить выделенные строки динамического списка и т.д. Можно создать массив и «вручную».

1. Как создать массив нужного размера

пМассив = новый Массив(4); //создали массив из 4 элементов
//Внесем значения элементов массива
пМассив = «Мы»;
пМассив = «создали»;
пМассив = «новый»;
пМассив = «массив»;

2. Как создать пустой массив и добавить в него элементы

пМассив = новый Массив; //создали пустой массив
//Внесем значения элементов массива
пМассив.Добавить(«Мы»);
пМассив.Добавить(«создали»);
пМассив.Добавить(«новый»);
пМассив.Добавить(«массив»);

3. Как создать многомерный массив.

Рассмотрим этот вопрос на примере двумерного массива, так как массивы больших размерностей используются значительно реже, а механизм их работы не отличается от двумерного.

пМассив = новый Массив (4, 2); //создали массив 4х2
//Внесем значения элементов массива, пронумеровав каждое слово
пМассив = «1. «;
пМассив = «Мы»;
пМассив = «2. «;
пМассив = «создали»;
пМассив = «3. «;
пМассив = «многомерный»;
пМассив = «4. «;
пМассив = «массив»;

4. Как создать фиксированный массив

Фиксированный массив отличается от обычного тем, что его нельзя изменять. Нельзя добавлять, удалять или менять значения элементов такого массива.

Фиксированный массив может быть получен из обычного:

пМассив = новый Массив;
пМассив.Добавить(«Мы»);
пМассив.Добавить(«создали»);
пМассив.Добавить(«новый»);
пМассив.Добавить(«массив»);
фМассив = новый ФиксированныйМассив(пМассив); // создали фиксированный массив

Функции работы с массивами

Работу функций будем рассматривать на примере одномерного массива пМассив, созданного выше и состоящего из 4 элементов:

  1. «Мы»
  2. «создали»
  3. «новый»
  4. «массив».
Функция ВГраница()

Получает наибольший индекс элемента массива. Он всегда на единицу меньше количества элементов массива.

Индекс = пМассив.ВГраница() // 3;

Функция Вставить()

Вставляет какое-то значение в элемент массива с указанным индексом. Последующие элементы массива сдвигаются

пМассив.Вставить(3, «новое значение») //Теперь массив состоит из 5 элементов

Функция Добавить()

Создает новый элемент в конце массива и вставляет туда заданное значение

пМассив.Добавить(«.») // добавили точку пятым элементов массива;

Функция Количество()

Возвращает количество элементов массива.

пМассив.Количество(); // 4

Функция Найти()

Ищет в массиве заданный элемент. Если находит, возвращает его индекс. Если не находит, возвращает Неопределено.

Индекс = пМассив.Найти(«массив»); // 3
Индекс = пМассив.Найти(«строка, которой не было»); // Неопределено

Функция Очистить()

Удаляет все значения из массива.

пМассив.Очистить();

Функция Получить()

Получает значение массива по индексу. Эту же задачу можно решить через .

Значение=пМассив.Получить(3) // «массив»
Значение=пМассив; // «массив»

Функция Удалить()

Удаляет элемент массива по индексу

пМассив.Удалить(3);

Функция Установить()

Устанавливает значение элемента массива по индексу. Работает аналогично .

пМассив.Установить(3, «массив!»);
пМассив=»массив!»;

Как обойти массив

Можно обойти все элементы массива без указания индекса:

Для каждого ЭлементМассива из пМассив Цикл
Сообщить(ЭлементМассива);
КонецЦикла;

Можно при обходе использовать индекс:

Для Индекс=0 по пМассив.ВГраница() Цикл
Сообщить(пМассив);
КонецЦикла;

Как обойти многомерный массив

Многомерный массив обходится с помощью тех же циклов (см. выше), но один цикл должен быть вложен в другой.

мМассив=новый массив(3,4);
Для каждого Элемент1 из мМассив Цикл
Для каждого Элемент2 из Элемент1 Цикл
Сообщить(Элемент1);
КонецЦикла;
КонецЦикла;

Или с применением индексов.

мМассив=новый массив(3,4);
Для Индекс1=0 по мМассив.ВГраница() Цикл
Для Индекс2 по мМассив.ВГраница() Цикл
Сообщить(мМассив);
КонецЦикла;
КонецЦикла;

Для сортировки массива нам потребуется вспомогательный объект с типом СписокЗначений.

СписокЗнач = новый СписокЗначений; // создаем список значений
СписокЗнач.ЗагрузитьЗначения(пМассив); // загружаем в список значения из массива
СписокЗнач.СортироватьПоЗначению(НаправлениеСортировки.Возр); //сортируем по возрастанию
СписокЗнач.СортироватьПоЗначению(НаправлениеСортировки.Убыв); //или по убыванию
пМассив=СписокЗнач.Выгрузить(); // выгружаем отсортированные значения обратно в массив

Сравнение двух массивов

Перед тем, как перейти к описанию функции сравнения, договоримся, что массивы считаются идентичными, если имеют одинаковое количество элементов и соответствующие элементы массивов равны. Тогда для сравнения можно использовать следующую функцию (кстати, такая функция уже присутствует в некоторых типовых конфигурациях):

Функция СравнитьМассивы(Массив1, Массив2)
Если Массив1.Количество()<>Массив2.Количество() Тогда
Возврат ЛОЖЬ; // Массивы не равны, сравнивать элементы нет смысла.
КонецЕсли;
Для Индекс=0 по Массив1.ВГраница() Цикл
Если Массив1<>Массив2 Тогда
Возврат Ложь; //эти элементы не равны, значит и массивы не равны
КонецЕсли;
КонецЦикла;
Возврат Истина; // Если дошли до сюда, то массивы равны
КонецФункции

В функцию нужно передать 2 сравниваемых массива. Функция возвращает значение Истина, если массивы равны, и Ложь, если не равны.