0

Как свернуть массив?

У этой задачи есть два варианта решения:

А. Свертка элементов массива перебором

Замысел таков: будем перебирать элементы исходного массива и переносить их во вспомогательный массив, контролируя уникальность элементов. Для этого мы воспользуемся методом Массив.Найти():

Массив = Новый Массив;
Массив.Добавить(1);
Массив.Добавить(2);
Массив.Добавить(3);
Массив.Добавить(2);

//добавим вспомогательный массив
СвернутыйМассив = Новый Массив;

Для каждого Элемент Из Массив Цикл
	Если СвернутыйМассив.Найти(Элемент) = Неопределено Тогда
		//если такого значения в массиве еще нет, добавим его
		СвернутыйМассив.Добавить(Элемент);
	КонецЕсли;
КонецЦикла;

Сообщить(СтрСоединить(СвернутыйМассив, ","));
//	1,2,3

Б. Свертка элементов массива через таблицу значений

Замысел этого решения заключается в использовании вспомогательной таблицы с одной единственной колонкой произвольного типа. Далее, используя метод ТаблицаЗначений.Свернуть(), мы получим набор уникальных значений, которые в дальнейшем сможем отсортировать и выгрузить обратно в исходный массив.

Массив = Новый Массив;
Массив.Добавить(1);
Массив.Добавить(2);
Массив.Добавить(3);
Массив.Добавить(2);

//создадим вспомогательную таблицу
ВспомогательнаяТаблица = Новый ТаблицаЗначений;
//добавим одну единственную колонку
ВспомогательнаяТаблица.Колонки.Добавить("Значение");

//добавим строки в таблицу по количеству элементов массива
Для Инд = 0 По Массив.ВГраница() Цикл
	ВспомогательнаяТаблица.Добавить();
КонецЦикла;

//загружаем значения из массива в колонку таблицы 
ВспомогательнаяТаблица.ЗагрузитьКолонку(Массив, "Значение");
//сворачиваем значения в колонке
ВспомогательнаяТаблица.Свернуть("Значение");
//дополнительно можем отсортировать их
ВспомогательнаяТаблица.Сортировать("Значение");

//выгрузим значения из таблицы в массив
Массив = ВспомогательнаяТаблица.ВыгрузитьКолонку("Значение");

Сообщить(СтрСоединить(Массив, ","));
//	1,2,3

PS: Последнее решение мне кажется более интересным за счет использования более эффективного кода.

Добавить комментарий

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