Здравствуйте, есть таблица с числами, мне необходимо обойти все числа в ТЗ, и разделить их на диапазоны, не могу сообразить, как мне в цикле задать чтобы при получении следующего числа сравнивать с предыдущим и если отличается на 1 то это один диапазон, если отличаются больше чем на 1 то другой диапазон, числа идут по порядку. Или может данный подход в корне не правильный?
По теме из базы знаний
- Расшифровка СКД. Фильтр отчета по диапазону чисел. Переопределение обработки расшифровки. Не модальный режим
- Работа с Ворд через СОМ-Объект
- Понимание схемы JSON (JSON Schema), часть 1
- Быстрая выгрузка в Excel с оформлением (числа, даты, колонтитулы, гиперссылки) через OpenXML
- "250+ тысяч, в штат и работу пока не ищу": как изменился типичный 1С-ник в 2023 году
Найденные решения
Вроде так (для двух чисел и более):
ТекущийДиапазон = ТаблицаДиапазонов.Добавить();
ТекущийДиапазон.Начало = ТаблицаЧисел[0].Число;
Для ИндексЧисла = 1 По ТаблицаЧисел.Количество() - 1 Цикл
Если ТаблицаЧисел[ИндексЧисла].Число <> ТаблицаЧисел[ИндексЧисла - 1].Число + 1 Тогда
ТекущийДиапазон.Конец = ТаблицаЧисел[ИндексЧисла - 1].Число;
ТекущийДиапазон = ТаблицаДиапазонов.Добавить();
ТекущийДиапазон.Начало = ТаблицаЧисел[ИндексЧисла].Число;
КонецЕсли;
КонецЦикла;
ТекущийДиапазон.Конец = ТаблицаЧисел[ТаблицаЧисел.Количество() - 1].Число;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Писал сразу набело, поэтому за работоспособность не ручаюсь :)
ПредыдущееЧисло = -99999999; ДиапазонОткрыт = Ложь;
Для Каждого СтрокаЧисла Из ТаблицаЧисел Цикл
Если СтрокаЧисла.Число <> ПредыдущееЧисло + 1 Тогда
Если ДиапазонОткрыт Тогда
Диапазон = ТаблицаДиапазонов[ТаблицаДиапазонов.Количество() - 1];
Диапазон.Конец = ПредыдущееЧисло;
ДиапазонОткрыт = Ложь;
КонецЕсли;
Диапазон = ТаблицаДиапазонов.Добавить();
Диапазон.Начало = СтрокаЧисла.Число;
ДиапазонОткрыт = Истина;
КонецЕсли;
ПредыдущееЧисло = СтрокаЧисла.Число;
КонецЦикла;
Если ДиапазонОткрыт Тогда
Диапазон = ТаблицаДиапазонов[ТаблицаДиапазонов.Количество() - 1];
Диапазон.Конец = ПредыдущееЧисло;
КонецЕсли;
Показать
Вроде так (для двух чисел и более):
ТекущийДиапазон = ТаблицаДиапазонов.Добавить();
ТекущийДиапазон.Начало = ТаблицаЧисел[0].Число;
Для ИндексЧисла = 1 По ТаблицаЧисел.Количество() - 1 Цикл
Если ТаблицаЧисел[ИндексЧисла].Число <> ТаблицаЧисел[ИндексЧисла - 1].Число + 1 Тогда
ТекущийДиапазон.Конец = ТаблицаЧисел[ИндексЧисла - 1].Число;
ТекущийДиапазон = ТаблицаДиапазонов.Добавить();
ТекущийДиапазон.Начало = ТаблицаЧисел[ИндексЧисла].Число;
КонецЕсли;
КонецЦикла;
ТекущийДиапазон.Конец = ТаблицаЧисел[ТаблицаЧисел.Количество() - 1].Число;
Показать
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот