Найти в Дзене
Golang

Простая сортировка в Go

Сортировка — популярная тема среди разработчиков. Это один из самых важных алгоритмов в информатике, потому что многие важные алгоритмы основаны на отсортированных массивах. Например, алгоритм бинарного поиска обычно считается одним из самых быстрых способов поиска чего-либо.

Я не буду здесь углубляться в алгоритмы сортировки, потому что эту информацию легко найти в гугле. Тем не менее, это очень интересная тема, поэтому вам обязательно стоит ее изучить. Но даже если алгоритмы сортировки вам не интересны, вы наверняка сталкивались с ситуацией, когда вам нужно было отсортировать список элементов. Вместо того, чтобы реализовывать свой собственный алгоритм с нуля, есть гораздо более простой способ сортировки. В этом посте мы увидим, как мы можем легко сортировать массивы в Go.

Использование пакета sort из стандартной библиотеки Go

Вы можете легко импортировать пакет sort и использовать его функции.

-2

sort.Interface

Сортировка типов структуры осуществляется с помощью sort.Sort (slice), если slice реализует три метода sort.Interface.

-3

Давайте разберем этот код и рассмотрим каждую функцию.

Len() просто возвращает вам длину массива.

Less() принимает индексы i и j и проверяет, меньше ли i-й элемент, чем j-й элемент.

Swap() меняет порядок i-го и j-го элементов.

Реализация собственных методов сортировки

Вы можете создавать собственные методы сортировки. Если ни один из трех вышеперечисленных методов вам не подходит, просто создайте тип, реализующий sort.Interface, а затем примените к нему sort.Sort(). Вот простой пример.

-4

Результат:

{Jacob Kim 21 1234567890}
{Jane Doe 22 4792091933}
{John Doe 22 4793721933}
{Chris Hemsworth 38 9375913934}
{Robert Downey Jr. 56 4459183048}

Мы определили новый employee, который представляет собой структуру, содержащую имя, фамилию, возраст и номер телефона сотрудника.

Мы также определили новый тип employeeDb, который представляет собой массив сотрудников. В нем реализован метод sort.Interface, для которого определены Len(), Less() и Swap.

Len() просто возвращает длину employeeDb, а Swap() меняет местами i-й и j-й элементы. Less() немного длинноват, но довольно прост. Мы определяем, какое значение больше, сначала отсортировав по возрасту. Если возраст равен, то стараемся сортировать по фамилии, потом по имени.

Когда вы вызываем sort.Sort(), мы видим, что сотрудники сначала сортируются по возрасту. Поскольку Jane Doe и John Doe одного возраста, они отсортированы по фамилии. Еще у них одна и та же фамилия! Поэтому они отсортированы по имени. Остальное говорит само за себя.

Мне кажется ,это довольно изящный способ сортировки . В зависимости от того, как вы применяете Less(), вы можете придумать совершенно другой способ сортировки.

Заключение

Вывод здесь заключается в том, что пакет sort предоставляет вам базовые методы сортировки, и если они не соответствуют вашим требованиям, то используйте sort.Interface — простой способ сортировки пользовательских типов по вашим собственным правилам.

Надеюсь, этот пост был вам полезен!

Golang
Go tests