Получить консультацию

Массивы в языке 1С 8. Примеры работы

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

Содержание

Как создать массив в 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] = "дешевле";
// [третье, слово, дешевле, второго]

//Чтобы собрать массив снова в строку, используем стрСоединить()
// чтобы слова были раздельно друг от друга, обязательно укажем разделитель
НоваяТекстоваяСтрока = СтрСоединить(МассивСлов," ");

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

7 + 19 =

К НАЧАЛУ