1С 8.3 Сортировать массив
Данные > Примеры кода 1С > 1С 8.3 Массив
Перейти в раздел примеры кода 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
КонецПроцедуры
МассивДляСортировки = Новый Массив;
МассивДляСортировки.Добавить(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;
ВерхняяГраница = МассивДляСортировки.ВГраница();
Сортировка_Массива_дроблением(МассивДляСортировки,НижняяГраница,ВерхняяГраница);
Возврат МассивДляСортировки;
КонецФункции
НижнийПределМассива = НижнийПредел;
ВерхнийПределМассива = ВерхнийПредел;
МассивСПределами = Массив[Цел((НижнийПределМассива+ВерхнийПределМассива)/2)];
Пока Истина Цикл
Пока Массив[НижнийПределМассива] < МассивСПределами Цикл
НижнийПределМассива = НижнийПределМассива + 1;
КонецЦикла;
Пока Массив[ВерхнийПределМассива] > МассивСПределами Цикл
ВерхнийПределМассива = ВерхнийПределМассива - 1;
КонецЦикла;
Если НижнийПределМассива > ВерхнийПределМассива Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если НижнийПредел < ВерхнийПределМассива Тогда
Сортировка_Массива_дроблением(Массив,НижнийПредел,ВерхнийПределМассива);
КонецЕсли;
Если НижнийПределМассива < ВерхнийПредел Тогда
Сортировка_Массива_дроблением(Массив,НижнийПределМассива,ВерхнийПредел);
КонецЕсли;
КонецПроцедуры
Функция БыстраяСортировка(МассивДляСортировки)
НижняяГраница = 0;
ВерхняяГраница = МассивДляСортировки.ВГраница();
Сортировка_Массива_дроблением(МассивДляСортировки,НижняяГраница,ВерхняяГраница);
Возврат МассивДляСортировки;
КонецФункции
Сортировка массива с помощью Таблицы значений в 1С 8.3 (иногда используется в практике):
Функция Сортировка_Массива_через_ТаблицуЗначений(МассивДляСортировки) Экспорт
ТЗдляСортировки = Новый ТаблицаЗначений;
ТЗдляСортировки.Колонки.Добавить("ВсеЗначенияМассива"); // Колонка, в которую будет загружен массив
// Создание строк по количеству элементов массива
Для Ном = 1 По МассивДляСортировки.Количество() Цикл
ТЗдляСортировки.Добавить();
КонецЦикла;
ТЗдляСортировки.ЗагрузитьКолонку(МассивДляСортировки, "ВсеЗначенияМассива");
ТЗдляСортировки.Сортировать("ВсеЗначенияМассива Возр");
МассивДляСортировки = ТЗдляСортировки.ВыгрузитьКолонку("ВсеЗначенияМассива");
Возврат МассивДляСортировки;
КонецФункции
ТЗдляСортировки = Новый ТаблицаЗначений;
ТЗдляСортировки.Колонки.Добавить("ВсеЗначенияМассива"); // Колонка, в которую будет загружен массив
// Создание строк по количеству элементов массива
Для Ном = 1 По МассивДляСортировки.Количество() Цикл
ТЗдляСортировки.Добавить();
КонецЦикла;
ТЗдляСортировки.ЗагрузитьКолонку(МассивДляСортировки, "ВсеЗначенияМассива");
ТЗдляСортировки.Сортировать("ВсеЗначенияМассива Возр");
МассивДляСортировки = ТЗдляСортировки.ВыгрузитьКолонку("ВсеЗначенияМассива");
Возврат МассивДляСортировки;
КонецФункции
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник