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

John Doe 22 1 1

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

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

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

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

Комментарии

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

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


См. также

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

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

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

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

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

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

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

Сортировка в навигаторе по метаданным

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

Модератору