Перейти к содержимому

1с как отсортировать массив

  • автор:

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

Существует много алгоритмов сортировки массивов. Все они могут быть адаптированы для любого языка программирования, в том числе и 1С. Но в 1С реализованы и платформенные способы сортировки. Именно о них пойдет речь в статье.

Самым простым и достаточно быстрым способом сортировки массива в 1С является следующий алгоритм:

  1. Выгрузка исходного массива в список значений;
  2. Сортировка списка значений с использованием платформенного метода СортироватьПоЗначению () ;
  3. Выгрузка списка значений обратно в массив.

Рассмотрим пример программного кода, реализующего описанную последовательность действий:
Список = Новый СписокЗначений ; // Подготовительные действия: создание списка значений
Список . ЗагрузитьЗначения ( Массив ); // Этап 1
Список . СортироватьПоЗначению ( НаправлениеСортировки . Возр ); // Этап 2
Массив = Список . ВыгрузитьЗначения (); // Этап 3

Параметр метода СортироватьПоЗначению () может принимать значения:

  • НаправлениеСортировки . Возр ;
  • НаправлениеСортировки . Убыв .

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

Кроме того, необходимо помнить, что таблица значений доступна только на стороне сервера.

Как отсортировать массив в 1с?

Задача сортировки массива на платформе 1С:Предприятие 8 — нетривиальная задача, т.к. отдельного метода, решающего эту задачу во встроенном языке нет.

Решить задачу можно следующим способом: если заранее известно, что потребуется сортировка некоторых элементов данных, можно сразу использовать более подходящую коллекцию — список значений. Он позволяет сортировать элементы не только по значению, но и по представлению. Если такой возможности нет, можно воспользоваться следующим кодом:

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

Читайте также:

  1. Как загрузить массив в список значений
  2. СписокЗначений.ЗагрузитьЗначения()
  3. СписокЗначений.ВыгрузитьЗначения()

Поделиться страницей в соц.сетях

Похожие записи

  • Как получить массив случайных чисел?
  • Как выбрать значение из списка значений?
  • Метод ВыбратьИзСписка() в обычной или управляемой форме
  • Метод ВыбратьИзМеню() в управляемой или обычной форме

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

ПРИМЕРЫ КОДА 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 ;
ВерхняяГраница = МассивДляСортировки . ВГраница ();
Сортировка_Массива_дроблением ( МассивДляСортировки , НижняяГраница , ВерхняяГраница );

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

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

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

    13 13 0 0 1 Скопировано.

    ред. 9 месяцев назад

    Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.

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

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