1с найти минимальное значение в массиве
Массив — это программная коллекция (объект встроенного языка), содержащая пронумерованную последовательность значений произвольного типа. Каждому элементу присваивается последовательный целочисленный номер — индекс, начинающийся с нуля. По индексу можно получить или установить значение элемента массива.
В 1С:Предприятие 8 существует два типа массивов:
- фиксированный массив — такой массив имеет фиксированный размер, заданный при его создании. Для фиксированного массива недоступно программное изменение размера, количества и последовательности элементов;
- обычный массив — такой массив имеет динамический размер и его верхний предел практически неограничен. Таким массивом можно произвольно оперировать из встроенного языка;
Сейчас мы рассмотрим обычные массивы.
Создание и инициализация элементов массива
Создание пустого массива выполняется с помощью оператора Новый :
Для добавления элементов в массив используется одноименный метод Массив.Добавить():
Каждый новый элемент помещается в конец массива. Чтобы создать массив с заданным размером, можно воспользоваться конструктором массива. Например, так:
Для доступа к отдельным элементам массива применяется операция разыменования: указывается имя переменной, объявленной как массив, а затем, в квадратных скобках, указывается индекс элемента: ИмяМассива[Индекс] . Такие конструкции можно указывать как слева от оператора присваивания:
Так и справа: в выражениях и в качестве параметров процедур и функций:
Границы массивов
Как было сказано выше, левая граница массива постоянна и всегда равно нулю (0). Верхняя граница напрямую связана с количеством элементов в массиве. Получить ее можно двумя способами:
- С использованием метода Массив.Количество() с последующим вычитанием 1;
- С использованием одноименного метода Массив.ВГраница();
Давайте рассмотрим распространенные операции с массивами
Перебор элементов массива
Для перебора (обхода) всех элементов массива обычно используется оператор цикла Для :
Либо оператор цикла Для Каждого :
Первый способ лучше использовать, если Вам необходимо получить одновременно и индекс, и значение массива. Второй способ больше подходит для ситуации, когда нужно только последовательно перебрать все значения массива. Использование второго способа повышает «читабельность кода».
Поиск в массиве
Для поиска значений в массиве можно воспользоваться одноименным методом Массив.Найти(). Он возвращает индекс найденного элемента или Неопределено , если таковой не был найден:
Объекты типа массив в 1С 8.3 представляют собой совокупность упорядоченных значений любого типа, в том числе и типа «массив», что в свою очередь позволяет организовывать многомерные массивы. Идентификация значений осуществляется по индексам, нумерация которых начинается с «0».
Создание массива
Синтаксис:
Примеры:
Добавление элементов в массив
Примеры:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Получение значения элемента по индексу
Поиск в массиве 1С
Присвоение значений элементам массива
Примеры:
Как узнать количество элементов массива (размер массива)
Перебор массива 1С
Примеры:
Перебор всех элементов двумерного массива
Примеры:
Удаление элементов из массива
Примеры:
Как разложить строку в массив
Пример преобразования массива в список значений
Пример преобразования массива в таблицу значений
Сортировка массива 1С разными способами
Примеры:
Как свернуть массив в 1С
Пример:
Поддержите нас, расскажите друзьям!
СПРОСИТЕ в комментариях!
При использовании данного сайта, вы подтверждаете свое согласие на использование файлов cookie в соответствии с настоящим уведомлением в отношении данного типа файлов. Если вы не согласны с тем, чтобы мы использовали данный тип файлов, то вы должны соответствующим образом установить настройки вашего браузера или не использовать сайт.
Отправляя любую форму на сайте, вы соглашаетесь с политикой конфиденциальности данного сайта.
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: массивы в 1С
Автор уроков и преподаватель школы: Владимир Милькин
Сегодня мы познакомимся с новым типом данных языка 1С, который называется Массив.
Массивы в языке 1С
Что такое массивы и зачем они вообще нужны программисту?
Давайте представим, что у нас есть 4 разных числа. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. К примеру: 25, 84, 31 и 96. Если бы мы захотели использовать их в своей программе, то нужно было бы дать имя каждому из чисел. А что если хранить их все вместе, под одним общим именем, к примеру, СлучайныеЧисла. И обращаться к ним как СлучайныеЧисла0, СлучайныеЧисла1, СлучайныеЧисла2 и так далее.
Значений много, а имя одно. И чтобы получить конкретное значение мы бы указывали имя и порядковый номер (начиная с нуля). Это и был бы массив.
Ещё полезно представлять себе массив как шкаф, у которого множество нумерованных ящиков (начиная с нуля). Шкаф - это массив, а ящики - это номера. Содержимое ящиков - элементы массива. Доступ к содержимому конкретного ящика осуществляется по имени шкафа и номеру ящика.
В языке 1С это будет выглядеть так:
Обращаю ваше внимание, что в этом примере я в первый раз использовал пояснения прямо в коде. Такие пояснения называются комментариями. Они отделяются от кода программы двумя косыми чертами и нужны только для программиста - компьютер их игнорирует. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
В массивах можно хранить значения разных типов, а не только числа:
В ящики массива значения можно не только класть, но и доставать:
Прелесть использования массивов состоит именно в том, что доступ к их значениям осуществляется через числовой номер. А значит мы легко можем перебирать все значения массива в цикле:
Задание №30. Необходимо ввести от пользователя 5 чисел, найти их сумму и вывести результат.
Давайте решим эту задачу двумя способами.
Сначала без использования массива:
А теперь с использованием массива:
Вроде бы сэкономили всего три строки. А если бы нужно было ввести не 5, а 100 чисел?
Задание №31. Переделайте приведенный выше пример, чтобы вводилось 10 чисел и находилось произведение.
Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся
Войдите на сайт как ученик
При помощи массивов можно решать достаточно сложные задачи. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Задание №32. Необходимо ввести от пользователя 5 чисел, найти наименьшее из них и вывести его.
Решение будет таким:
Разберитесь с этим примером и выполните его на компьютере для различных значений.
Идём далее. Обратите внимание на то, что во всех примерах выше мы создаём массив сразу с нужным количеством ящиков. Например:
Это означает, что у этого массива есть ящики под номерами 0, 1, 2, 3, 4.
А, что если мы бы захотели объявить пустой массив? Это делается вот так:
Если мы сразу после объявления пустого массива попытаемся обратиться к одному из его ящиков, то получим ошибку:
В пустой массив ящики нужно сначала добавить, причём сразу указывая их значения:
И вот теперь мы можем обращаться к этим ящикам по их номерам (помните, что в 1С массивы нумеруются с нуля):
Кстати, чтобы в любой момент узнать количество ящиков в массиве, воспользуемся командой Количество. Её нужно вызывать через точку после имени массива:
Понятие «массив» уже давно используется в программировании и, чаще всего, под ним понимают некоторую структуру в памяти, состоящую из последовательности элементов. Массив в 1С – самая простая из универсальных коллекций значений. Помимо массива к универсальным коллекциям относятся:
- Список значений (в отличие от массива у значений из списка есть представление, реализована возможность сортировки и интерфейсного представления коллекции);
- Таблица значений – коллекция, имеющая колонки для расширенного описания значения, подобную структуру можно получить, выполнив запрос;
- Дерево – очень похоже на таблицу, дополненную структурой подчиненности;
- Структура – динамический набор имен и значений переменных;
- Соответствие – подобно структуре, только переменные сопоставляются не строковым представлениям, а друг другу.
Методы массива
Программное создание экземпляра массива происходит с помощью с помощью оператора Новый() (Рис.1).
Как видно из приведенного примера массивы можно создавать как с фиксированным количеством элементов, так и без этого ограничения.
Прежде, чем приступать к обсуждению методов работы с массивом, давайте определимся с двумя понятиями:
- Индекс элемента – можно представить как порядковый номер отдельно взятого значения;
- Количество элементов – число элементов в коллекции, его определение доступно с помощью метода Количество().
Важно знать: в 1С подсчет количества значений любой коллекции начинается с 1, а раздача индексов с 0, т.е первый элемент в массиве имеет индекс 0. Таким образом, обход коллекции с помощью цикла с итератором должен начинаться с 0 и заканчиваться количеством элементов минус 1, в противном случае система с помощью окна (Рис.2) уведомит о наступлении исключительной ситуации.
Любой объект конфигурации имеет свои методы для работы, массив не исключение, перечислим их с некоторой расшифровкой:
- ВГраница() – с помощью метода можно получить максимальный индекс элемента, для пустого массива будет возвращено значение (-1);
- Вставить() – этот метод имеет два параметра: индекс и значение, индекс указывает куда в массив вставить новый элемент, добавляемое значение может быть пустым;
- Добавить() – этот метод вставки значения можно использовать, когда место размещения элемента непринципиально, с его помощью новые данные будут записаны в конец имеющегося массива;
- Найти() – в случае успешного выполнения возвращает индекс указанного в скобках значения, в противном случае возвращает «Неопределено»;
- Очистить() –очищает коллекцию;
- Получить() – читает данные, расположенные в массиве по указанному индексу, можно заменить квадратными скобками [];
- Удалить() – удаляет элемент с указанным индексом;
- Установить() – заменяет данные в указанной ячейке массива.
Одномерные и многомерные массивы
В простейшем случае одномерный массив может содержать значения различных типов (Рис.3)
Результат выполнения вышеприведенного кода представлен на Рис.4
Таким образом, мы получили одномерный массив, состоящий из строкового значения, ссылки на элемент справочника и даты. При этом при добавлении элементов мы использовали два различных метода Добавить() и Вставить(), если бы при добавлении даты мы использовали метод Добавить() наш результат имел бы несколько другой вид.
В старших классах средней школы дается представление о понятии двумерной матрицы. Это такой набор данных, каждый элемент которого имеет два индекса (в простейшем случае порядковый номер по вертикали и по горизонтали) именно она лучше всего иллюстрирует понятие двумерного массива.
Создавая подобную матрицу можно указать количество строк и столбцов, которые будут использованы.
Допустим, перед нами стоит задача создать массив из фамилии, имени и отчества двух сотрудников. С помощью кода (Рис.5) создаем соответствующий массив с фиксированным количеством столбцов и строк.
Для его обхода нам понадобится два цикла, в первом цикле мы обходим массив по строкам, во втором разбираем строку на элементы. Это можно сделать либо с помощью цикла «Для каждого …. Из» (Рис.6)
Либо с помощью цикла с итератором «Для … по» (Рис.7)
В принципе, количество измерений конкретного массива может быть любым, другое дело, что в случае большого количества уровней детализации достаточно сложно создать построитель для чтения данных.
Использование массива
Массивы в 1С чаще всего используются для:
- Создания различных отборов используемых при работе с запросами и другими коллекциями значений;
- Передачи списков в качестве параметров между процедурами и функциями;
- Обмена данными с внешними компонентами, подключенными с использованием COM технологии.
Безусловно, это далеко неполный список того, в каких целях можно задействовать объект «Массив».
Массив в 1С — это набор некоторых значений. Значения в одном массиве могут быть различных типов.
Массив может быть получен в результате выполнения различных функций, например, ВыгрузитьКолонку() таблицы значений; в виде массива можно получить выделенные строки динамического списка и т.д. Можно создать массив и «вручную».
Создание массива
1. Как создать массив нужного размера
пМассив = новый Массив ( 4 ) ; //создали массив из 4 элементов
//Внесем значения элементов массива
пМассив [ 0 ] = "Мы" ;
пМассив [ 1 ] = "создали" ;
пМассив [ 2 ] = "новый" ;
пМассив [ 3 ] = "массив" ;
2. Как создать пустой массив и добавить в него элементы
пМассив = новый Массив ; //создали пустой массив
//Внесем значения элементов массива
пМассив . Добавить ( "Мы" ) ;
пМассив . Добавить ( "создали" ) ;
пМассив . Добавить ( "новый" ) ;
пМассив . Добавить ( "массив" ) ;
3. Как создать многомерный массив.
Рассмотрим этот вопрос на примере двумерного массива, так как массивы больших размерностей используются значительно реже, а механизм их работы не отличается от двумерного.
пМассив = новый Массив ( 4 , 2 ) ; //создали массив 4х2
//Внесем значения элементов массива, пронумеровав каждое слово
пМассив [ 0 ] [ 0 ] = "1. " ;
пМассив [ 0 ] [ 1 ] = "Мы" ;
пМассив [ 1 ] [ 0 ] = "2. " ;
пМассив [ 1 ] [ 1 ] = "создали" ;
пМассив [ 2 ] [ 0 ] = "3. " ;
пМассив [ 2 ] [ 1 ] = "многомерный" ;
пМассив [ 3 ] [ 0 ] = "4. " ;
пМассив [ 3 ] [ 1 ] = "массив" ;
4. Как создать фиксированный массив
Фиксированный массив отличается от обычного тем, что его нельзя изменять. Нельзя добавлять, удалять или менять значения элементов такого массива.
Фиксированный массив может быть получен из обычного:
пМассив = новый Массив ;
пМассив . Добавить ( "Мы" ) ;
пМассив . Добавить ( "создали" ) ;
пМассив . Добавить ( "новый" ) ;
пМассив . Добавить ( "массив" ) ;
фМассив = новый ФиксированныйМассив ( пМассив ) ; // создали фиксированный массив
Функции работы с массивами
Работу функций будем рассматривать на примере одномерного массива пМассив, созданного выше и состоящего из 4 элементов:
Функция ВГраница()
Получает наибольший индекс элемента массива. Он всегда на единицу меньше количества элементов массива.
Функция Вставить()
Вставляет какое-то значение в элемент массива с указанным индексом. Последующие элементы массива сдвигаются
Функция Добавить()
Создает новый элемент в конце массива и вставляет туда заданное значение
Функция Количество()
Возвращает количество элементов массива.
Функция Найти()
Ищет в массиве заданный элемент. Если находит, возвращает его индекс. Если не находит, возвращает Неопределено.
Индекс = пМассив . Найти ( "массив" ) ; // 3
Индекс = пМассив . Найти ( "строка, которой не было" ) ; // Неопределено
Функция Очистить()
Удаляет все значения из массива.
Функция Получить()
Получает значение массива по индексу. Эту же задачу можно решить через [].
Функция Удалить()
Удаляет элемент массива по индексу
Функция Установить()
Устанавливает значение элемента массива по индексу. Работает аналогично [].
Как обойти массив
Можно обойти все элементы массива без указания индекса:
Можно при обходе использовать индекс:
Как обойти многомерный массив
Многомерный массив обходится с помощью тех же циклов (см. выше), но один цикл должен быть вложен в другой.
мМассив = новый массив ( 3 , 4 ) ;
Для каждого Элемент 1 из мМассив Цикл
Для каждого Элемент 2 из Элемент 1 Цикл
Сообщить ( Элемент 1 ) ;
КонецЦикла ;
КонецЦикла ;
Или с применением индексов.
мМассив = новый массив ( 3 , 4 ) ;
Для Индекс 1 = 0 по мМассив . ВГраница ( ) Цикл
Для Индекс 2 по мМассив [ Индекс 1 ] . ВГраница ( ) Цикл
Сообщить ( мМассив [ Индекс 1 ] [ Индекс 2 ] ) ;
КонецЦикла ;
КонецЦикла ;
Сортировка массива
Для сортировки массива нам потребуется вспомогательный объект с типом СписокЗначений.
Список Знач = новый СписокЗначений ; // создаем список значений
СписокЗнач . ЗагрузитьЗначения ( пМассив ) ; // загружаем в список значения из массива
СписокЗнач . СортироватьПоЗначению ( НаправлениеСортировки . Возр ) ; //сортируем по возрастанию
СписокЗнач . СортироватьПоЗначению ( НаправлениеСортировки . Убыв ) ; //или по убыванию
пМассив = СписокЗнач . Выгрузить ( ) ; // выгружаем отсортированные значения обратно в массив
Сравнение двух массивов
Перед тем, как перейти к описанию функции сравнения, договоримся, что массивы считаются идентичными, если имеют одинаковое количество элементов и соответствующие элементы массивов равны. Тогда для сравнения можно использовать следующую функцию (кстати, такая функция уже присутствует в некоторых типовых конфигурациях):
Функция СравнитьМассивы ( Массив 1 , Массив 2 )
Если Массив 1 . Количество ( ) <>Массив2.Количество() Тогда
Возврат ЛОЖЬ ; // Массивы не равны, сравнивать элементы нет смысла.
КонецЕсли ;
Для Индекс = 0 по Массив 1 . ВГраница ( ) Цикл
Если Массив 1 [ Индекс ] <>Массив2[Индекс] Тогда
Возврат Ложь ; //эти элементы не равны, значит и массивы не равны
КонецЕсли ;
КонецЦикла ;
Возврат Истина ; // Если дошли до сюда, то массивы равны
КонецФункции
В функцию нужно передать 2 сравниваемых массива. Функция возвращает значение Истина, если массивы равны, и Ложь, если не равны.
Добавить комментарий Отменить ответ
Теперь мы в соцсетях! Подписывайтесь, чтобы получать информацию о последних обновлениях или задать вопрос.
Читайте также: