Home  >  Article  >  Backend Development  >  Golang sort specific implementation

Golang sort specific implementation

WBOY
WBOYOriginal
2023-05-10 20:18:06729browse

Golang is a very popular programming language. Its efficient concurrency and simple syntax make it a very suitable language for back-end and network programming. In Golang, the sort package provides a very convenient way to implement sorting. It can sort arrays, slices, strings and other types. It also provides a very complete custom sorting method. The sort package will be introduced in detail below. How to use and implement it.

sort package built-in function

sort package provides three built-in sorting functions:

  1. sort.Ints(a []int): for int type Slices are sorted in ascending order.
  2. sort.Float64s(a []float64): Sort float64 type slices in ascending order.
  3. sort.Strings(a []string): Sort slices of string type in ascending order.

The following is how to use these three built-in functions:

package main

import (
    "fmt"
    "sort"
)

func main() {
    ints := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}
    sort.Ints(ints)
    fmt.Println(ints)

    floats := []float64{3.1, 1.4, 4.1, 1.5, 5.9, 2.6, 5.3, 5.5, 3.5}
    sort.Float64s(floats)
    fmt.Println(floats)

    strings := []string{"golang", "is", "an", "awesome", "language"}
    sort.Strings(strings)
    fmt.Println(strings)
}

Output results:

[1 1 2 3 3 4 5 5 5 6 9]
[1.4 1.5 2.6 3.1 3.5 4.1 5.3 5.5 5.9]
[an awesome golang is language]

sort package custom sorting

In addition to the built-in In addition to sorting functions, the sort package also provides a very convenient way to customize sorting functions. In Golang, we can implement custom sorting methods by implementing the sort.Interface interface. The sort.Interface interface needs to implement the following three methods:

type Interface interface {
    // 返回数据集合的元素数量
    Len() int
    // 比较两个元素的大小,返回是否应该交换位置
    Less(i, j int) bool
    // 交换两个元素的位置
    Swap(i, j int)
}

We implement custom sorting through the sort.Interface interface. Here is an example to sort based on the number of occurrences of letters in a string:

package main

import (
    "fmt"
    "sort"
)

type StringArray []string

func (s StringArray) Len() int {
    return len(s)
}

// 自定义排序方式:按照字符串中字母出现次数升序排序
func (s StringArray) Less(i, j int) bool {
    return less(s[i], s[j])
}

// 交换两个元素的位置
func (s StringArray) Swap(i, j int) {
    s[i], s[j] = s[j], s[i]
}

// 判断字符串 a 是否小于字符串 b
func less(a, b string) bool {
    if len(a) < len(b) {
        return true
    } else if len(a) > len(b) {
        return false
    }

    for i := 0; i < len(a); i++ {
        if a[i] < b[i] {
            return true
        } else if a[i] > b[i] {
            return false
        }
    }

    return false
}

func main() {
    strings := StringArray{"banana", "apple", "pear", "pie"}
    sort.Sort(strings)
    fmt.Println(strings)
}

Output result:

[pear pie apple banana]

As can be seen from the above example, it is very convenient to implement a custom sorting method through the sort.Interface interface. You only need to implement three methods. When custom sorting, we can achieve the sorting method we need by comparing the sizes of two elements.

Notes on using the sort package

When using the sort package, there are some things that need to be paid attention to, as follows:

  1. The built-in sorting functions provided by the sort package and Custom sorting is all in ascending order. If you need to sort in descending order, you need a custom sorting function.
  2. When customizing the sorting function, you should ensure that the result of comparing the sizes of two elements can correctly reflect the sorting method, especially when multiple fields are involved in sorting. When comparing strings, pay attention to the impact of string length, and perform alphabetical comparison only when the lengths are the same.
  3. sort is sorted in place, that is, no new slices will be created, and the original slices will be directly modified. Whether the original data needs to be retained should be considered.

The above is the detailed content of Golang sort specific implementation. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn