Массив в 1С

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

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

Для создания массива в 1С используется ключевое слово Новый после которого указывается имя класса.

Массив = Новый Массив; //в массиве 0 элементов

В переменной Массив будет находиться массив.

В конструкторе массива можно указать количество элементов:

Массив = Новый Массив(5); //в массиве 5 элементов

Сразу после создания все элементы массива будут равны Неопределено. При этом размер массива может быть изменен, при добавлении в него новых элементов.

Для добавления элементов используется метод Добавить():

Массив = Новый Массив;
Массив.Добавить("Строка");
Массив.Добавить(2);
Массив.Добавить(Истина);

Индекс массива

Чтобы обратиться к элементам массива можно использовать индексы. Индекс — это номер элемента в массиве. Нумерация элементов начинается с 0. Чтобы обратиться к первому элементу нужно использовать индекс 0, а чтобы обратиться к пятому элементу — индекс 4. При этом, если мы обратимся к несуществующему элементу массива, то будет ошибка «Индекс находится за границами массива».

Массив = Новый Массив;
Массив.Добавить("Строка");
Массив.Добавить(2);
Массив.Добавить(Истина);
 
Массив[0] = "НоваяСтрока";
Массив[2] = 12;
Массив[5] = 10; //так нельзя, будет ошибка

Перебор массива

С помощью цикла Для Каждого:

ПеременнаяМассив = Новый Массив;
ПеременнаяМассив.Добавить("Строка");
ПеременнаяМассив.Добавить(2);
ПеременнаяМассив.Добавить(Истина);
Для Каждого ЭлементМассива Из ПеременнаяМассив Цикл
        //метод Сообщить() выводит сообщение на экран
	Сообщить(ЭлементМассива);	
КонецЦикла;

Через цикл Для Каждого нельзя изменить значения массива, меняться будет переменная ЭлементМассива.

Перебрать массив можно и через цикл Для. В этом случае через индекс можно изменять значения массива:

ПеременнаяМассив= Новый Массив;
ПеременнаяМассив.Добавить("Строка");
ПеременнаяМассив.Добавить(2);
ПеременнаяМассив.Добавить(Истина);
 
//метод ВГраница() возвращает максимальный индекс массива
Для Сч = 0 По ПеременнаяМассив.ВГраница() Цикл 
	ЭлементМассива[Сч] = 1;	
КонецЦикла;

Основные методы для работы с массивами

  • Добавить(<Значение>) — добавляет значение в конец массива, количество элементов увеличивается на 1.
  • Вставить(<Индекс>, <Значение>) — вставляет значение в массив в элемент с индексом <Индекс>, если индекс больше чем количество элементов, то массив будет дополнен нужным количеством элементов со значением Неопределено.
  • Установить(<Индекс>, <Значение>) — устанавливает значение в массив в элемент с индексом <Индекс>, можно так: Массив[0] = «Первый»;
  • Количество() — вернет количество элементов в массиве.
  • ВГраница() — вернет максимальный индекс в массиве, если в массиве 0 элементов, то вернет -1. Равен Количество() — 1
  • Получить(<Индекс>) — получает значение по индексу, можно так: Значение = Массив[0];
  • Удалить(<Индекс>) — удаляет значение по индексу.
  • Очистить() — удаляет все элементы из массива.
  • Найти(<Значение>) — поиск в массиве, если найдено то вернется индекс элемента, иначе Неопределено. При поиске элемента в массиве будет выполняться перебор всех элементов массива, поэтому время поиска пропорционально размеру массива (чем больше элементов, тем медленнее ищет)

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

Многомерный массив в 1С — это массив массивов:

МногомерныйМассив = Новый Массив();
 
ОдномерныйМассив = Новый Массив;
ОдномерныйМассив.Добавить(1);
ОдномерныйМассив.Добавить(2);
МногомерныйМассив.Добавить(ОдномерныйМассив);
 
ОдномерныйМассив2 = Новый Массив;
ОдномерныйМассив2.Добавить(3);
ОдномерныйМассив2.Добавить(4);
МногомерныйМассив.Добавить(ОдномерныйМассив2);

В переменной МногомерныйМассив будет 2 элемента типа массив, каждый из которых содержит по 2 элемента типа число.

Через индексы можно изменять и читать значения многомерного массива:

МногомерныйМассив[0][0] = 1;
МногомерныйМассив[0][1] = 2;
 
Сообщить(МногомерныйМассив[0][0]);

Через конструктор можно сразу создать многомерный массив:

ДвухмерныйМассив = Новый Массив(2,2);
ТрехмерныйМассив = Новый Массив(3,3,3);

Примеры работы с массивами

Как добавить элементы в массив

ПеременнаяМассив.Добавить("Массив");
ПеременнаяМассив.Добавить(12);
ПеременнаяМассив.Добавить(Истина);

Как изменить значение элемента массива

ПеременнаяМассив[0] = "Новый массив";
ПеременнаяМассив[1] = ПеременнаяМассив[1] + 1;
//редко используемый вариант
ПеременнаяМассив.Установить(2, Ложь);

Как узнать сколько элементов в массиве

Колво = ПеременнаяМассив.Количество();

Как узнать максимальный индекс массива

МаксИнд = ПеременнаяМассив.ВГраница();

Как удалить все элементы из массива

ПеременнаяМассив.Очистить();

Как найти значение в массиве

Индекс = ПеременнаяМассив.Найти(12);
Если Индекс <> Неопределено Тогда
	ПеременнаяМассив[Индекс] = 13;
КонецЕсли;

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

Сортировка выбором

//Сортировка выбором
МассивЧисел = Новый Массив;
МассивЧисел.Добавить(2);
МассивЧисел.Добавить(4);
МассивЧисел.Добавить(1);
МассивЧисел.Добавить(5);
МассивЧисел.Добавить(3);
 
ВерхняяГраница = МассивЧисел.ВГраница();
Для i = 0 По ВерхняяГраница Цикл        
	Мин = i;                               
	Для j = i + 1 По ВерхняяГраница Цикл            
		Если МассивЧисел[j] < МассивЧисел[Мин] Тогда
			Мин = j;
		КонецЕсли; 
	КонецЦикла; 
	Если Не МассивЧисел [Мин] = МассивЧисел [i] Тогда           
		Буфер = МассивЧисел[i];                            
		МассивЧисел[i] = МассивЧисел[Мин];
		МассивЧисел[Мин] = Буфер; 
	КонецЕсли;
КонецЦикла;

Сортировка пузырьком

//сортировка пузырьком
МассивЧисел = Новый Массив;
МассивЧисел.Добавить(2);
МассивЧисел.Добавить(4);
МассивЧисел.Добавить(1);
МассивЧисел.Добавить(5);
МассивЧисел.Добавить(3);
 
ВерхняяГраница = МассивЧисел.ВГраница();
Для i = 0 По ВерхняяГраница Цикл
	Для j = 0 По ВерхняяГраница - i - 1 Цикл
		Если МассивЧисел[j] > МассивЧисел[j + 1] Тогда
			Буфер = МассивЧисел[j];
			МассивЧисел[j] = МассивЧисел[j + 1];
			МассивЧисел[j + 1] = Буфер;
		КонецЕсли;            
	КонецЦикла;        
КонецЦикла;

Быстрая сортировка

//быстрая сортировка
МассивЧисел = Новый Массив;
МассивЧисел.Добавить(2);
МассивЧисел.Добавить(4);
МассивЧисел.Добавить(1);
МассивЧисел.Добавить(5);
МассивЧисел.Добавить(3);
БыстраяСортировка(МассивЧисел);
 
Процедура БыстраяСортировка(МассивЧисел, Мин = Неопределено, 
										Макс = Неопределено)
 
	Если Мин = Неопределено Тогда
		Мин = 0;
	КонецЕсли;
 
	Если Макс = Неопределено Тогда
		Макс = МассивЧисел.ВГраница();
	КонецЕсли;
 
	i = Мин;
	j = Макс;
	m = МассивЧисел[Цел(i + j) / 2];
 
	Пока i <= j Цикл
		Пока МассивЧисел[i] < m Цикл 
			i = i + 1;
		КонецЦикла;
		Пока МассивЧисел[j] > m Цикл
			j = j - 1;
		КонецЦикла;
		Если i <= j Тогда
			Если i <> j Тогда
				Буфер = МассивЧисел[i];
            	МассивЧисел[i] = МассивЧисел[j];
           		МассивЧисел[j] = Буфер;
			КонецЕсли;;
			i = i + 1;
			j = j - 1;
		КонецЕсли;
	КонецЦикла;
 
	Если Мин < j Тогда
		БыстраяСортировка(МассивЧисел, Мин, j);
	КонецЕсли;
 
	Если i < Макс Тогда
		БыстраяСортировка(МассивЧисел, i, Макс);
	КонецЕсли;
 
КонецПроцедуры

Фиксированный массив

Фиксированный массив — это тот же самый массив, но у которого нельзя изменить ни количество элементов, ни значения массива. Создается 1 раз и больше не может быть изменен. Может быть создан на основании обычного массива:

ОбычныйМассив = Новый Массив;
ОбычныйМассив.Добавить(1);
ОбычныйМассив.Добавить(2);
 
ФиксМассив = Новый ФиксированныйМассив(ОбычныйМассив);

Если попытаться изменить элемент фиксированного массива, то будет ошибка «Индексированное значение доступно только для чтения».

На основании фиксированного массива можно создать обычный массив:

ОбычныйМассив = Новый Массив;
ОбычныйМассив.Добавить(1);
ОбычныйМассив.Добавить(2);
 
ФиксМассив = Новый ФиксированныйМассив(ОбычныйМассив);
 
СноваОбычныйМассив = Новый Массив(ФиксМассив);
СноваОбычныйМассив[0] = 11; //теперь можно менять значения

У фиксированного массива есть следующие методы:

  • Количество()
  • ВГраница()
  • Получить(<Индекс>), можно так: Значение = Массив[0];
  • Найти(<Значение>)

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

Правильное удаление элементов из середины массива

При удалении элемента из середины массива, массив как бы «смыкается». Если перебирать все элементы массива в цикле и удалять по какому-то условию, то после удаления элемента, следующий элемент будет пропущен. Поэтому правильно перебирать массив с конца:

Инд = МассивЧегото.ВГраница();
Пока Инд >= 0 Цикл
	Если МассивЧегото[Инд]) = 5 Тогда
		МассивЧегото.Удалить(Инд);	
	КонецЕсли;
	Инд = Инд - 1;	
КонецЦикла;

Данный код удаляет из массива все элементы, которые равны 5.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями: