1С 8.3 Сортировать массив - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Сортировать массив

Данные > Примеры кода 1С > 1С 8.3 Массив
Сортировка массива с помощью Списка значений в 1С 8.3 (самый простой метод, часто встречается в практике):
Процедура Сортировка_Массива_через_СписокЗначений() Экспорт

   МассивДляСортировки = Новый Массив;
   МассивДляСортировки.Добавить(7);
   МассивДляСортировки.Добавить(2);
   МассивДляСортировки.Добавить(4);
   МассивДляСортировки.Добавить(9);
   МассивДляСортировки.Добавить(14);
   МассивДляСортировки.Добавить(1);
   МассивДляСортировки.Добавить(0);
   МассивДляСортировки.Добавить(6); // Массив: (7, 2, 4, 9, 14, 1, 0, 6)

   // Загружаем и сортируем элементы Массива в Списке значений
   СписокЗначенийДляСортировки = Новый СписокЗначений;
   СписокЗначенийДляСортировки.ЗагрузитьЗначения(МассивДляСортировки);
   СписокЗначенийДляСортировки.СортироватьПоЗначению();
  // Параметр метода СортироватьПоЗначению() может принимать значения:
  //     * НаправлениеСортировки.Возр
  //     * НаправлениеСортировки.Убыв


   // Выгружаем СписокЗначений обратно в Массив
   МассивДляСортировки = СписокЗначенийДляСортировки.ВыгрузитьЗначения();

   Сообщить(СтрСоединить(МассивДляСортировки, ","));
   //  0,1,2,4,6,7,9,14

КонецПроцедуры

Сортировка массива через дробление в 1С 8.3 (самый быстрый, рекомендуется, редко встречается в практике):
Процедура Сортировка_Массива_дроблением(Массив,НижнийПредел,ВерхнийПредел) Экспорт

   НижнийПределМассива = НижнийПредел;
   ВерхнийПределМассива = ВерхнийПредел;
   МассивСПределами = Массив[Цел((НижнийПределМассива+ВерхнийПределМассива)/2)];

   Пока Истина Цикл
       Пока Массив[НижнийПределМассива] < МассивСПределами Цикл
           НижнийПределМассива = НижнийПределМассива + 1;
       КонецЦикла;

       Пока Массив[ВерхнийПределМассива] > МассивСПределами Цикл
           ВерхнийПределМассива = ВерхнийПределМассива - 1;
       КонецЦикла;

       Если НижнийПределМассива > ВерхнийПределМассива Тогда
           Прервать;
       КонецЕсли;

   КонецЦикла;

   Если НижнийПредел < ВерхнийПределМассива Тогда
       Сортировка_Массива_дроблением(Массив,НижнийПредел,ВерхнийПределМассива);
   КонецЕсли;

   Если НижнийПределМассива < ВерхнийПредел Тогда
       Сортировка_Массива_дроблением(Массив,НижнийПределМассива,ВерхнийПредел);
   КонецЕсли;

КонецПроцедуры

Функция БыстраяСортировка(МассивДляСортировки)

   НижняяГраница = 0;
   ВерхняяГраница = МассивДляСортировки.ВГраница();
   Сортировка_Массива_дроблением(МассивДляСортировки,НижняяГраница,ВерхняяГраница);

   Возврат МассивДляСортировки;

КонецФункции
Сортировка массива с помощью Таблицы значений в 1С 8.3 (иногда используется в практике):
Функция Сортировка_Массива_через_ТаблицуЗначений(МассивДляСортировки) Экспорт

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

   Возврат МассивДляСортировки;

КонецФункции
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 18.05.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому