Регистрация  |  Вход

Легкая задачка на сортировку

Всем привет,

давно не писал на форуме, меня немного подкосили семейные проблемы, но вот я снова в седле.

давно не попадались задачи на сортировку, все стараюсь сортировать на БД уровне, но вот оно.

нужно отсортировать список объектов по Integer полю, и вернуть запись с наименьшим значением.
!но записей с одинаковым наименьшим значением может быть несколько - в таком случае нужно вернуть их всех - вот этот момент меня и смущает больше всего, т.к. я еще не разобрал как "стандартные" способы сортировки работают в такой ситуации

также записи с null-евым полем нужно игнорировать, разумеется.

и если вернулось несколько записей, то уже идет сортировка по другому признаку и так далее.

сейчас ломаю голову как написать сам алгоритм сортировки, так чтобы и просто и хорошо.

и пока я думаю,

вы тоже предлагайте, наверняка найдется кто-то кто может сходу дать правильный алгоритм и не чего мне изобретать велосипед

Всем привет,

давно не писал на форуме, меня немного подкосили семейные проблемы, но вот я снова в седле.

давно не попадались задачи на сортировку, все стараюсь сортировать на БД уровне, но вот оно.

нужно отсортировать список объектов по Integer полю, и вернуть запись с наименьшим значением.
!но записей с одинаковым наименьшим значением может быть несколько - в таком случае нужно вернуть их всех - вот этот момент меня и смущает больше всего, т.к. я еще не разобрал как "стандартные" способы сортировки работают в такой ситуации

также записи  с null-евым полем нужно игнорировать, разумеется.

и если вернулось несколько записей, то уже идет сортировка по другому признаку и так далее.

сейчас ломаю голову как написать сам алгоритм сортировки, так чтобы и просто и хорошо.

и пока я думаю,

вы тоже предлагайте, наверняка найдется кто-то кто может сходу дать правильный алгоритм и не чего мне изобретать велосипед

Не понимаю сути вопроса.
Не можешь найти все записи с наименьшим значением или хочешь найти оптимальный алгоритм для поиска?

Не понимаю сути вопроса.
Не можешь найти все записи с наименьшим значением или хочешь найти оптимальный алгоритм для поиска?

Тот момент что тебя смущает - находишь ОДНУ запись с наименьшим значение (ORDER BY + LIMIT 1)
Потом берешь это значение и кверишь остальные записи с таким же значением.

Тот момент что тебя смущает - находишь ОДНУ запись с наименьшим значение (ORDER BY + LIMIT 1)
Потом берешь это значение и кверишь остальные записи с таким же значением.

Это так сказать решение в лоб - я не владею всякими алгоритмами пузырьковой сортировки и в гарварде не обучался

Это так сказать решение в лоб - я не владею всякими алгоритмами пузырьковой сортировки и в гарварде не обучался :D 

все записи большой выборкой заранее выкверены, разложены по разным спискам, так что сортировать нужно именно в коде
повторно кверить с целью сортировки уж совсем костыльно...

и нужен оптимальный алгоритм, думаю, так буквально 7-10 строк, но пока не думал об этом, но скоро придется

все записи большой выборкой заранее выкверены, разложены по разным спискам, так что сортировать нужно именно в коде  :(   
повторно кверить с целью сортировки уж совсем костыльно...

и нужен оптимальный алгоритм, думаю, так буквально 7-10 строк, но пока не думал об этом, но скоро придется

Sortable interface can solve any issues.

Sortable interface can solve any issues.

wilder
Sortable interface

ты имел ввиду Comparable interface?

вот написал утилити-класс для трехуровневой сортировки списка моих sObjects, и вместе с тремя классами wraper-ами, имплиментирующими interface Comparable, вышло целых 180 строк. Пока еще не решил, молодец я после всего сделанного или все-таки "рукожоп"...

[quote="wilder"]Sortable interface[/quote]

ты имел ввиду Comparable interface?

вот написал утилити-класс для трехуровневой сортировки списка моих sObjects, и вместе с тремя классами wraper-ами, имплиментирующими interface Comparable, вышло целых 180 строк. Пока еще не решил, молодец я после всего сделанного или все-таки "рукожоп"... 

Den Brown
Пока еще не решил, молодец я после всего сделанного или все-таки "рукожоп"...

Для этого нужно глятуть код. Но не думаю что 180 строчек для первого раза сильно страшная цифра. Через месяц можно вернуться к коду и улучшить его:)

[quote="Den Brown"]Пока еще не решил, молодец я после всего сделанного или все-таки "рукожоп"...[/quote]

Для этого нужно глятуть код. Но не думаю что 180 строчек для первого раза сильно страшная цифра. Через месяц можно вернуться к коду и улучшить его:)

wilder
для первого раза сильно страшная цифра

спасибо :)

[quote="wilder"]для первого раза сильно страшная цифра[/quote]

спасибо :)

Сортировка нужна устойчивая? Каково ожидаемое количество элементов, которые надо отсортировать? Производительность имеет значение?

Сортировка нужна устойчивая? Каково ожидаемое количество элементов, которые надо отсортировать? Производительность имеет значение?

и если вернулось несколько записей, то уже идет сортировка по другому признаку и так далее.

Ну так стандартный интерфейс сортировки так и работает. Всё можно написать в CompareTo. В кейсе, который должен возвращать 0 (равенство значений по integer полю), пишешь блок сравнения по другому полю, которое нужно. Метод sort() всё отсортирует. Потом правда из отсортированного списка нужно будет вытащить эти элементы. Хотя можно попробовать организовать по OrderBy запрос с функцией min() по нужному полю.

[quote]и если вернулось несколько записей, то уже идет сортировка по другому признаку и так далее.[/quote]
Ну так стандартный интерфейс сортировки так и работает. Всё можно написать в CompareTo. В кейсе, который должен возвращать 0 (равенство значений по integer полю), пишешь блок сравнения по другому полю, которое нужно. Метод sort() всё отсортирует. Потом правда из отсортированного списка нужно будет вытащить эти элементы. Хотя можно попробовать организовать по OrderBy запрос с функцией min() по нужному полю. 

Извините, что поздно отвечаю, были семейно-личные турублентности.

Mike V
Сортировка нужна устойчивая? Каково ожидаемое количество элементов, которые надо отсортировать? Производительность имеет значение?

Майк, не смущай нас простых людей такими вопросами, выборка там небольшая, так что сортировку сделал в стиле "лишь бы работало"

Tellen
В кейсе, который должен возвращать 0 (равенство значений по integer полю), пишешь блок сравнения по другому полю, которое нужно.

Молодец, Tellen, я именно так и подумал. Но после того как уже запилил три сортировочных класса... мы не ищем легких путей... но ты совершенно прав, нужно было просто развивать тему в "0" кейсе...

Извините, что поздно отвечаю, были семейно-личные турублентности.

[quote="Mike V"]Сортировка нужна устойчивая? Каково ожидаемое количество элементов, которые надо отсортировать? Производительность имеет значение?[/quote]

Майк, не смущай нас простых людей такими вопросами, выборка там небольшая, так что сортировку сделал в стиле "лишь бы работало"

[quote="Tellen"]В кейсе, который должен возвращать 0 (равенство значений по integer полю), пишешь блок сравнения по другому полю, которое нужно. [/quote]

Молодец, Tellen, я именно так и подумал. Но после того как уже запилил три сортировочных класса...  мы не ищем легких путей... но ты совершенно прав, нужно было просто развивать тему в "0" кейсе...