Eugene Bond
sudo rm - rf /
Дано:
Набор данных с полями от a до f
Задача:
Получить данные, сгруппированные в четыре сегмента.
Сегмент А: данные в которых значения полей a == 1 и b == 1
Сегмент Б: данные в которых значения полей a == 1 и b == 0
Сегмент В: данные в которых значения полей a == 0 и b == 1
Сегмент Г: данные в которых значения полей a == 0 и b == 0
Внутри каждого сегмента, данные должны быть построены в следующей последовательности:
- сначала все элементы у которых c == 1
- потом один случайный элемент, у которого d == 1
- далее идут элементы, у которых e == 1, упорядоченные по значению поля f
- но после каждых трех элементов с e == 1 идет один элемент с e == 0 (каждый четвертый)
- завершают последовательность оставшиеся элементы, у которых e == 0 и которые не появлялись раньше
Проблема:
Проблемные места выделены подчеркиванием. Без них задача тривиальна. Когда появилось первое условие про случайный элемент с d == 1, это было решено через простенький костыль без особого усложнения логики.
Появление второго подчеркнутого условия заставило задуматься о пересмотре подхода генерации списка.
Плюс хотелось бы получить более-менее универсальное решение, которое позволит достаточно гибко управлять условиями сортировки.
Идея:
Представить данные в виде пула. Запрос каждого следующего элемента выберет из набора данных подходящий по требованиям.
Видимые недостатки:
- при запросе среза данных, всегда необходимо обработать данные от первого элемента и до конца требуемого среза
- предварительная подготовка данных (не уверен, что это недостаток, но явное усложнение реализации)
Остается открытым вопрос гибкости решения и возможности простого управления порядком вывода данных. Пока не совсем понятно возможно ли унифицировать подчеркнутые условия.
Буду рад услышать мысли и советы.
Конструктивный флейм приветствуется
Набор данных с полями от a до f
Задача:
Получить данные, сгруппированные в четыре сегмента.
Сегмент А: данные в которых значения полей a == 1 и b == 1
Сегмент Б: данные в которых значения полей a == 1 и b == 0
Сегмент В: данные в которых значения полей a == 0 и b == 1
Сегмент Г: данные в которых значения полей a == 0 и b == 0
Внутри каждого сегмента, данные должны быть построены в следующей последовательности:
- сначала все элементы у которых c == 1
- потом один случайный элемент, у которого d == 1
- далее идут элементы, у которых e == 1, упорядоченные по значению поля f
- но после каждых трех элементов с e == 1 идет один элемент с e == 0 (каждый четвертый)
- завершают последовательность оставшиеся элементы, у которых e == 0 и которые не появлялись раньше
Проблема:
Проблемные места выделены подчеркиванием. Без них задача тривиальна. Когда появилось первое условие про случайный элемент с d == 1, это было решено через простенький костыль без особого усложнения логики.
Появление второго подчеркнутого условия заставило задуматься о пересмотре подхода генерации списка.
Плюс хотелось бы получить более-менее универсальное решение, которое позволит достаточно гибко управлять условиями сортировки.
Идея:
Представить данные в виде пула. Запрос каждого следующего элемента выберет из набора данных подходящий по требованиям.
Видимые недостатки:
- при запросе среза данных, всегда необходимо обработать данные от первого элемента и до конца требуемого среза
- предварительная подготовка данных (не уверен, что это недостаток, но явное усложнение реализации)
Остается открытым вопрос гибкости решения и возможности простого управления порядком вывода данных. Пока не совсем понятно возможно ли унифицировать подчеркнутые условия.
Буду рад услышать мысли и советы.
Конструктивный флейм приветствуется

Последнее редактирование: