1с статьи | Курс-репетитор программиста 1С

Одномерный массив

// нумерация начинается с 0
Массив = Новый Массив();    

// добавили элемент                  
Массив.Добавить("Значение");                              

// вставили перед ним ещё один                   
Массив.Вставить(0, "Значение");                              

// изменили значение первого элемента                              
Массив.Установить(0, "Новое");   

// удалили последнее значение
Массив.Удалить(Массив.ВГраница());
       
// загадка
Сообщить(Массив.Получить(0));        

Показать решение

Многомерный массив

// массив из 2 элементов,
// каждый из которых - массив из 2 элементов
Массив = Новый Массив(2,2);                 

// сообщит значение Неопределено
Сообщить(Массив[0][1]);

// установили значение 
Массив[0][1] = 10;

// попробуем его найти
ИндексНайденногоЭлемента = Массив.Найти(10);

// какой будет результат?

Показать решение

Обход одномерного массива

// создадим массив случайного размера (от 0 до 10 элементов)
ГСЧ = Новый ГенераторСлучайныхЧисел();           
РазмерМассива = ГСЧ.СлучайноеЧисло(0, 10);  
Если РазмерМассива = 0 Тогда             
   // если передать в конструктор 0 получим ошибку
   Массив = Новый Массив(); 
Иначе
   Массив = Новый Массив(РазмерМассива);
КонецЕсли;

// если в массиве нет элементов - выходим
Если Не Массив.Количество() Тогда
   Возврат;
КонецЕсли;

// прямой обход циклом "Для"
Для Индекс = 0 По Массив.ВГраница() Цикл

   // получим Неопределено, т.к. элементы 
   // массива не инициализированы
   Элемент = Массив[Индекс];
   
   // установим элемент массива случайным числом
   // в том числе отрицательным
   // в диапазоне от -50 до +50
   Массив.Установить(Индекс, -50 + ГСЧ.СлучайноеЧисло(0, 100)); 
   
КонецЦикла;

// обратный обход циклом "Пока"
Индекс = Массив.ВГраница();

Пока Индекс >= 0 Цикл
   Элемент = Массив[Индекс];
   
   Индекс = Индекс - 1;
КонецЦикла;

Массив.Очистить(); // очистим массив
Массив.Добавить(1);
Массив.Добавить(2);
Индекс = 0; // служебный счетчик

// обход циклом "Для Каждого"
Для Каждого Элемент Из Массив Цикл
   // Элемент - значение элемента массива   
   Сообщить(Элемент);  
   
   // ошибка, нельзя изменять массив
   // при обходе циклом "Для каждого"
   Массив.Вставить(0,100);
   
   // чтобы не попасть в бесконечный цикл
   // предусматриваем прервание цикла
   Если Индекс = 1 Тогда
      Прервать;
   КонецЕсли; 
   
   Индекс = Индекс + 1;
КонецЦикла;

// Что будет выведено?

Показать решение

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

Массив = Новый Массив;
// сформируем массив из 10 элементов
// со значениями из диапазона [-50,50]
ГСЧ = Новый ГенераторСлучайныхЧисел();           
РазмерМассива = 10;  
Для Индекс = 1 По РазмерМассива Цикл
   Массив.Добавить(-50 + ГСЧ.СлучайноеЧисло(0, 100));
КонецЦикла; 

// обратный обход циклом "Пока"
// обеспечивает корректное
// удаление элементов
Индекс = Массив.ВГраница();

Пока Индекс >= 0 Цикл
   Элемент = Массив[Индекс];
   
   // удалим отрицательные элементы
   Если Элемент < 0 Тогда
      // удаляем элемент массива "с конца"         
      Массив.Удалить(Индекс);         
   КонецЕсли; 
   // уменьшаем счетчик
   Индекс = Индекс - 1;
КонецЦикла;

// обход циклом "Для Каждого"
// не предполагает изменение состава массива
Для Каждого Элемент Из Массив Цикл
   // удалим положительные элементы
   Если Элемент > 0 Тогда
      // так неправильно
      Индекс = Массив.Найти(Элемент);
      Массив.Удалить(Индекс);         
   КонецЕсли; 
КонецЦикла;

// Почему в массиве останутся элементы?

Показать решение

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

Массив = Новый Массив;
// сформируем массив из 10 элементов
// со значениями из диапазона [-50,50]
ГСЧ = Новый ГенераторСлучайныхЧисел();           
РазмерМассива = 10;  
Для Индекс = 1 По РазмерМассива Цикл
   Массив.Добавить(-50 + ГСЧ.СлучайноеЧисло(0, 100));
КонецЦикла;

// для сортировки можно использовать стандартные алгоритмы
// а можно применить следующий метод

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

Массив = Список.ВыгрузитьЗначения();

// Чем плох этот метод?

Показать решение

Массив (Array)

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл.

При обходе выбираются значения элементов массива.

Возможно обращение к значению элемента посредством оператора [...].

В качестве аргумента передается индекс значения (нумерация с 0).

Конструктор (На основании фиксированного массива)

Синтаксис: Новый Массив(<Массив>)

Параметры:

<Массив> (необязательный) Тип: ФиксированныйМассив. Фиксированный массив.

Описание: Создаваемый массив заполняется значениями из исходного фиксированного массива. К элементам исходного массива применяется рекурсивное преобразование, т.е. элементы фиксированного массива, в свою очередь являющиеся фиксированными массивами, будут помещены в массив с преобразованием к типу Массив.

Конструктор (По количеству элементов)

Синтаксис: Новый Массив(<КоличествоЭлементов1>,...,<КоличествоЭлементовN>)

Параметры:

<КоличествоЭлементов1>,...,<КоличествоЭлементовN> (необязательный) Тип: Число.

Каждый параметр определяет количество элементов массива в соответствующем измерении. Может задаваться неограниченное количество параметров. Если ни один параметр не указан, то создается одномерный массив с нулевым количеством элементов.

Описание: Создает массив из указанного количества элементов. Если задано несколько параметров, то будет создан массив, элементами которого являются массивы (и т.д. в зависимости от количества параметров). Фактически конструктор позволяет создать массивы массивов, которые могут являться аналогом многомерного массива.

ВГраница (UBound)

Синтаксис: ВГраница()

Возвращаемое значение: Тип: Число.

Наибольший индекс в массиве. Если количество элементов массива равно 0, возвращает -1.

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

Примечание: Наибольший индекс соответствует количеству элементов массива минус 1.

Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Вставить (Insert)

Синтаксис: Вставить(<Индекс>, <Значение>)

Параметры:

<Индекс> (обязательный) Тип: Число. Индекс вставляемого значения.

<Значение> (необязательный) Тип: Произвольный. Вставляемое значение. Если не указан, то будет добавлено значение типа Неопределено.

Описание: Вставляет значение в массив по указанному индексу.

Примечание: Допускается указание индекса большего, чем ВГраница. В этом случае массив дополняется элементами с индексами от ВГраница()+1 до указанного в параметре индекса.

Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Добавить (Add)

Синтаксис: Добавить(<Значение>)

Параметры:

<Значение> (необязательный) Тип: Произвольный. Добавляемое значение. Если не указан, то будет добавлено значение типа Неопределено.

Описание: Добавляет элемент в конец массива.

Примечание: При добавлении количество элементов массива увеличивается на 1.

Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Количество (Count)

Синтаксис: Количество()

Возвращаемое значение:

Тип: Число.

Описание: Получает количество элементов в массиве.

Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Найти (Find)

Синтаксис: Найти(<Значение>)

Параметры:

<Значение> (обязательный) Тип: Произвольный. Искомое значение.

Возвращаемое значение: Тип: Число, Неопределено. Если элемент найден, возвращается его индекс. Если элемент не найден, возвращается Неопределено.

Описание: Выполняет поиск элемента в массиве.

Примечание: Метод эффективно использовать для поиска уникальных значений.

Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Очистить (Clear)

Синтаксис: Очистить()

Описание:

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

Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Получить (Get)

Синтаксис: Получить(<Индекс>)

Параметры:

<Индекс> (обязательный) Тип: Число. Индекс элемента.

Возвращаемое значение: Тип: Произвольный.

Описание: Получает значение по индексу. Работает аналогично оператору [].

Примечание: Применяется в случаях, когда использование оператора [] невозможно.

Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Удалить (Delete)

Синтаксис: Удалить(<Индекс>)

Параметры:

<Индекс> (обязательный) Тип: Число. Индекс удаляемого элемента.

Описание: Удаляет значение из массива по указанному индексу.

Примечание: Если указанный в параметре индекс больше, чем ВГраница, то никаких действий не производится и не выдается сообщение "Индекс находится за границами массива".

Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Установить (Set)

Синтаксис: Установить(<Индекс>, <Значение>)

Параметры:

<Индекс> (обязательный) Тип: Число. Индекс элемента. <Значение> (обязательный) Тип: Произвольный. Устанавливаемое значение.

Описание: Устанавливает значение по индексу. Работает аналогично оператору [].

Примечание: Применяется в случаях, когда использование оператора [] невозможно.

Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Слишком маленькое разрешение экрана.