- В этой теме 1 ответ, 2 участника, последнее обновление 14 часов, 2 минуты назад сделано .
Просмотр 1 ветки ответов
Просмотр 1 ветки ответов
- Для ответа в этой теме необходимо авторизоваться.
Программирование и администрирование в 1С
База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как отсортировать массив структур по полю в 1С?
можно ли сортировать массив по полю?
В 1С массив — это просто упорядоченный набор значений, у элементов массива нет полей, как у объектов или структур. Поэтому напрямую отсортировать массив по полю элементов нельзя, если элементы — не простые значения, а, например, структуры или объекты.
Чтобы отсортировать массив по полю элементов (например, если массив содержит структуры с одинаковым набором полей), нужно:
1. Преобразовать массив в СписокЗначений.
2. Загрузить в СписокЗначений элементы массива.
3. Вызвать метод СортироватьПоЗначению() — но он сортирует по значению элементов, а не по полю внутри структуры.
4. Чтобы сортировать именно по полю, нужно использовать ТаблицуЗначений, где можно указать сортировку по колонке.
Пример сортировки массива структур по полю «Имя»:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Исходный массив структур Массив = Новый Массив; Массив.Добавить(Новый Структура("Имя,Возраст", "Иван", 30)); Массив.Добавить(Новый Структура("Имя,Возраст", "Петр", 25)); Массив.Добавить(Новый Структура("Имя,Возраст", "Алексей", 35)); // Создаем таблицу значений с колонками, соответствующими полям структур Таблица = Новый ТаблицаЗначений; Таблица.Колонки.Добавить("Имя"); Таблица.Колонки.Добавить("Возраст"); // Заполняем таблицу значений из массива Для Каждого Элемент Из Массив Цикл НоваяСтрока = Таблица.Добавить(); НоваяСтрока.Имя = Элемент.Имя; НоваяСтрока.Возраст = Элемент.Возраст; КонецЦикла; // Сортируем таблицу по колонке "Имя" по возрастанию Таблица.Сортировать("Имя Возр"); // Если нужно, можно выгрузить обратно в массив структур ОтсортированныйМассив = Новый Массив; Для Каждого Строка Из Таблица Цикл ОтсортированныйМассив.Добавить(Новый Структура("Имя,Возраст", Строка.Имя, Строка.Возраст)); КонецЦикла; |
Таким образом, сортировка по полю возможна через ТаблицуЗначений, а не напрямую в массиве.
Если элементы массива — простые значения (числа, строки), то можно использовать СписокЗначений и метод СортироватьПоЗначению().
https://helpf.pro/faq8/view/1364.html