Упорядочивание (сортировка) массива

John Doe 22 1 1

Сортирует массив через методы объекта "СписокЗначений". Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив. В подавляющем большинстве случаев достаточно использовать метод как процедуру. Метод реализован в виде функции для: - удобства вычисления выражения (результата сортировки) в отладчике - возможности инициализации (получения) копии результата на вызывающей стороне в той же строке, что и сам вызов . Поддерживаемые контексты: клиент, сервер. Метод подходит для размещения в клиент-серверном общем модуле.

// Сортирует массив через методы объекта "СписокЗначений".
// Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив.
//
// Метод не требует смены контекста исполнения кода (подходит для размещения в клиент-серверном общем модуле).
//
// В подавляющем большинстве случаев достаточно использовать метод как процедуру.
// Метод реализован в виде функции для:
// - удобства вычисления выражения (результата сортировки) в отладчике
// - возможности инициализации (получения) копии результата на вызывающей стороне в той же строке, что и сам вызов
// .
//
// Параметры:
//  МассивДляУпорядочивания - Массив - Массив элементов, которые необходимо упорядочить (по значению или по представлению).
//                                     Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив.
//  ПорядокСортировки - Строка - "Возр" или "Убыв" (в любом регистре, т.е. регистр не важен).
//  СортироватьПоЗначению - Булево - Если Ложь, то сортировать по представлению.
// 
// Возвращаемое значение:
//  Массив - упорядоченный массив.
//
Функция УпорядочитьМассив(МассивДляУпорядочивания, Знач ПорядокСортировки = "Возр", Знач СортироватьПоЗначению = Истина) Экспорт

	лПорядокСортировки = НаправлениеСортировки.Возр;
	Если НРег(ПорядокСортировки) = НРег("Убыв") Тогда
		лПорядокСортировки = НаправлениеСортировки.Убыв;
	КонецЕсли;
	
	СЗ = Новый СписокЗначений;
	СЗ.ЗагрузитьЗначения(МассивДляУпорядочивания);
	Если СортироватьПоЗначению Тогда
		СЗ.СортироватьПоЗначению(лПорядокСортировки);
	Иначе
		СЗ.СортироватьПоПредставлению(лПорядокСортировки);
	КонецЕсли;
	МассивДляУпорядочивания = СЗ.ВыгрузитьЗначения();
	
	Возврат МассивДляУпорядочивания;

КонецФункции
1

Комментарии

markers
#1, 25 февраля 2021 05:54

А кто-нибудь делал замеры, скорость сортировки через СЗ и собственной реализации сортировки массива (на инфостарте полно вариантов)? По тому-что представляется, что сортировка через СЗ дороговата (за счет создания и утилизации объекта), но возможно её окупает скорость сортировки средствами платформы.
Спасибо!


См. также

Сортировка слиянием

Функция сортировки массива или списка значений (ссылок одного типа) по реквизитам соответствующих объектов

ЗаполнитьЗначениеРеквизитаУпорядочивания (БСП)

СброситьЗначениеРеквизитаУпорядочивания (БСП)

ПолучитьНовоеЗначениеРеквизитаДопУпорядочивания (БСП)

Сортировка ДанныеФормыДеревоЗначений с изменением направления

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

РазностьМассивов (БСП)

Значение в массиве

Модератору