Одна функция сортировки для сортировки общих коллекций - PullRequest
0 голосов
/ 23 января 2019

В моем проекте у меня много коллекций (срезов) разных типов данных.Любая конкретная коллекция должна определять поля, по которым она может сортироваться.Я хочу написать одну функцию сортировки и вызывать ее с пользовательским вводом (поле сортировки и порядок) всякий раз, когда коллекция должна быть отсортирована.Я придумал следующий шаблонный код (описал только один тип коллекции, но для других он будет таким же): https://gist.github.com/abonec/f1ee23a38e78ea48d470c39885de47ba

У меня есть интерфейс Sortable для коллекций.Сортируемый должен быть передан в sortStats с пользовательским вводом поля сортировки.Если конкретная реализация поддерживает этот тип сортировки, она должна вернуть sort.Interface с соответствующим интерфейсом.

Проблема со многими повторными реализациями sort.Interface, где Len() и Swap() метод идентичны.Отличается только Less().

Есть ли какой-либо подход к избавлению от методов Len() и Swap() в этом случае или может быть другой подход к написанию универсальной функции сортировки с полем динамической сортировки?

1 Ответ

0 голосов
/ 23 января 2019

Вы ищете дженерики, которые Go в настоящее время не поддерживает. См. эту запись FAQ .

Команда Go работает над добавлением обобщений к языку - это незавершенная работа, и каждый волен участвовать в обсуждении. Как только дженерики существуют, они предоставят вам решение, которое вы ищете здесь.


А пока вы можете использовать генерацию кода или придумать немного другой дизайн для вашей проблемы. Некоторое дублирование кода тоже хорошо, Go не хмурится так плохо, как некоторые другие языки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...