1с найти минимальное значение в массиве
Понятие «массив» уже давно используется в программировании и, чаще всего, под ним понимают некоторую структуру в памяти, состоящую из последовательности элементов. Массив в 1С – самая простая из универсальных коллекций значений. Помимо массива к универсальным коллекциям относятся:
- Список значений (в отличие от массива у значений из списка есть представление, реализована возможность сортировки и интерфейсного представления коллекции);
- Таблица значений – коллекция, имеющая колонки для расширенного описания значения, подобную структуру можно получить, выполнив запрос;
- Дерево – очень похоже на таблицу, дополненную структурой подчиненности;
- Структура – динамический набор имен и значений переменных;
- Соответствие – подобно структуре, только переменные сопоставляются не строковым представлениям, а друг другу.
Методы массива
Программное создание экземпляра массива происходит с помощью с помощью оператора Новый() (Рис.1).
Как видно из приведенного примера массивы можно создавать как с фиксированным количеством элементов, так и без этого ограничения.
Прежде, чем приступать к обсуждению методов работы с массивом, давайте определимся с двумя понятиями:
- Индекс элемента – можно представить как порядковый номер отдельно взятого значения;
- Количество элементов – число элементов в коллекции, его определение доступно с помощью метода Количество().
Важно знать: в 1С подсчет количества значений любой коллекции начинается с 1, а раздача индексов с 0, т.е первый элемент в массиве имеет индекс 0. Таким образом, обход коллекции с помощью цикла с итератором должен начинаться с 0 и заканчиваться количеством элементов минус 1, в противном случае система с помощью окна (Рис.2) уведомит о наступлении исключительной ситуации.
Любой объект конфигурации имеет свои методы для работы, массив не исключение, перечислим их с некоторой расшифровкой:
- ВГраница() – с помощью метода можно получить максимальный индекс элемента, для пустого массива будет возвращено значение (-1);
- Вставить() – этот метод имеет два параметра: индекс и значение, индекс указывает куда в массив вставить новый элемент, добавляемое значение может быть пустым;
- Добавить() – этот метод вставки значения можно использовать, когда место размещения элемента непринципиально, с его помощью новые данные будут записаны в конец имеющегося массива;
- Найти() – в случае успешного выполнения возвращает индекс указанного в скобках значения, в противном случае возвращает «Неопределено»;
- Очистить() –очищает коллекцию;
- Получить() – читает данные, расположенные в массиве по указанному индексу, можно заменить квадратными скобками [];
- Удалить() – удаляет элемент с указанным индексом;
- Установить() – заменяет данные в указанной ячейке массива.
Одномерные и многомерные массивы
В простейшем случае одномерный массив может содержать значения различных типов (Рис.3)
Результат выполнения вышеприведенного кода представлен на Рис.4
Таким образом, мы получили одномерный массив, состоящий из строкового значения, ссылки на элемент справочника и даты. При этом при добавлении элементов мы использовали два различных метода Добавить() и Вставить(), если бы при добавлении даты мы использовали метод Добавить() наш результат имел бы несколько другой вид.
В старших классах средней школы дается представление о понятии двумерной матрицы. Это такой набор данных, каждый элемент которого имеет два индекса (в простейшем случае порядковый номер по вертикали и по горизонтали) именно она лучше всего иллюстрирует понятие двумерного массива.
Создавая подобную матрицу можно указать количество строк и столбцов, которые будут использованы.
Допустим, перед нами стоит задача создать массив из фамилии, имени и отчества двух сотрудников. С помощью кода (Рис.5) создаем соответствующий массив с фиксированным количеством столбцов и строк.
Для его обхода нам понадобится два цикла, в первом цикле мы обходим массив по строкам, во втором разбираем строку на элементы. Это можно сделать либо с помощью цикла «Для каждого …. Из» (Рис.6)
Либо с помощью цикла с итератором «Для … по» (Рис.7)
В принципе, количество измерений конкретного массива может быть любым, другое дело, что в случае большого количества уровней детализации достаточно сложно создать построитель для чтения данных.
Использование массива
Массивы в 1С чаще всего используются для:
- Создания различных отборов используемых при работе с запросами и другими коллекциями значений;
- Передачи списков в качестве параметров между процедурами и функциями;
- Обмена данными с внешними компонентами, подключенными с использованием COM технологии.
Безусловно, это далеко неполный список того, в каких целях можно задействовать объект «Массив».
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 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. Как создать массив нужного размера
//Внесем значения элементов массива
2. Как создать пустой массив и добавить в него элементы
пМассив = новый Массив ; //создали пустой массив
//Внесем значения элементов массива
3. Как создать многомерный массив.
Рассмотрим этот вопрос на примере двумерного массива, так как массивы больших размерностей используются значительно реже, а механизм их работы не отличается от двумерного.
//Внесем значения элементов массива, пронумеровав каждое слово
4. Как создать фиксированный массив
Фиксированный массив отличается от обычного тем, что его нельзя изменять. Нельзя добавлять, удалять или менять значения элементов такого массива.
Фиксированный массив может быть получен из обычного:
пМассив = новый Массив ;
Функции работы с массивами
Работу функций будем рассматривать на примере одномерного массива пМассив, созданного выше и состоящего из 4 элементов:
Функция ВГраница()
Получает наибольший индекс элемента массива. Он всегда на единицу меньше количества элементов массива.
Функция Вставить()
Вставляет какое-то значение в элемент массива с указанным индексом. Последующие элементы массива сдвигаются
Функция Добавить()
Создает новый элемент в конце массива и вставляет туда заданное значение
Функция Количество()
Возвращает количество элементов массива.
Функция Найти()
Ищет в массиве заданный элемент. Если находит, возвращает его индекс. Если не находит, возвращает Неопределено.
Функция Очистить()
Удаляет все значения из массива.
Функция Получить()
Получает значение массива по индексу. Эту же задачу можно решить через [].
Функция Удалить()
Удаляет элемент массива по индексу
Функция Установить()
Устанавливает значение элемента массива по индексу. Работает аналогично [].
Как обойти массив
Можно обойти все элементы массива без указания индекса:
Можно при обходе использовать индекс:
Как обойти многомерный массив
Многомерный массив обходится с помощью тех же циклов (см. выше), но один цикл должен быть вложен в другой.
Или с применением индексов.
Сортировка массива
Для сортировки массива нам потребуется вспомогательный объект с типом СписокЗначений.
Сравнение двух массивов
Перед тем, как перейти к описанию функции сравнения, договоримся, что массивы считаются идентичными, если имеют одинаковое количество элементов и соответствующие элементы массивов равны. Тогда для сравнения можно использовать следующую функцию (кстати, такая функция уже присутствует в некоторых типовых конфигурациях):
Возврат Истина ; // Если дошли до сюда, то массивы равны
КонецФункции
В функцию нужно передать 2 сравниваемых массива. Функция возвращает значение Истина, если массивы равны, и Ложь, если не равны.
Как создать массив
Для создания массива в 1С используется ключевое слово Новый после которого указывается имя класса.
В переменной МассивЗначений будет находиться массив.
В конструкторе массива можно указать количество элементов:
МассивЗначений = Новый Массив ( 8 ) ; //в массиве 8 элементовСразу после создания все элементы массива будут равны Неопределено. При этом размер массива может быть изменен, при добавлении в него новых элементов.
Для добавления элементов используется метод Добавить:
Можно добавлять новые элементы в массив через метод Вставить, с указанием индекса, куда нужно вставить новый элемент. Если указать индекс больше чем количество элементов в массиве, то в массив будет добавлено нужное количество элементов со значением Неопределено:
//в массиве [Первый, Второй, Третий, Неопределено, Неопределено, Шестой]Количество элементов в массиве
При добавлении каждого нового элемента в массив, количество элементов увеличивается на единицу. Получить общее количество элементов в массиве можно с помощью метода Количество:
Индекс массива
//будет ошибка Индекс находится за границами массиваГраница массива
Получить элемент массива
Получить элемент массива можно через квадратные скобки или методом Получить:
Перебор массива
С помощью цикла Для Каждого:
Через цикл Для Каждого нельзя изменить значения массива, меняться будет переменная ЭлементМассива.
Перебрать массив можно и через цикл Для. В этом случае через индекс можно изменять значения массива:
//метод ВГраница() возвращает максимальный индекс массиваПоиск в массиве
Для поиска значений в массиве предназначен метод Найти. Параметром нужно передать значение, которое нужно найти в массиве. А вернет метод индекс элемента в массиве, если он найден, и Неопределено, если такого значения нет в массиве. Нужно учитывать, что чем больше массив, тем медленнее будет выполняться поиск в нем, так как поиск в массиве выполняется перебором всех элементов.
Читайте также: