當前位置: 首頁>>編程語言>>正文


Go語言教程:使用自定義函數排序

返回Go語言教程首頁

概念簡介

有時候我們想使用和集合的自然排序不同的方法對集合進行排序。
例如,我們想按照字母的長度而不是首字母順序對字符串排序。
這裏是一個 Go 自定義排序的例子。

例程代碼


package main

import "sort"
import "fmt"

// 為了在 Go 中使用自定義函數進行排序,我們需要一個對應的
// 類型。這裏我們創建一個為內置 `[]string` 類型的別名的
// `ByLength` 類型,
type ByLength []string

// 我們在類型中實現了 `sort.Interface` 的 `Len`,`Less`
// 和 `Swap` 方法,這樣我們就可以使用 `sort` 包的通用
// `Sort` 方法了,`Len` 和 `Swap` 通常在各個類型中都差
// 不多,`Less` 將控製實際的自定義排序邏輯。在我們的例
// 子中,我們想按字符串長度增加的順序來排序,所以這裏
// 使用了 `len(s[i])` 和 `len(s[j])`。
func (s ByLength) Len() int {
    return len(s)
}
func (s ByLength) Swap(i, j int) {
    s[i], s[j] = s[j], s[i]
}
func (s ByLength) Less(i, j int) bool {
    return len(s[i]) < len(s[j])
}

// 一切都準備好了,我們現在可以通過將原始的 `fruits` 切片轉型成 `ByLength` 來實現我們的自定排序了。然後對這個轉型的切片使用 `sort.Sort` 方法。
func main() {
    fruits := []string{"peach", "banana", "kiwi"}
    sort.Sort(ByLength(fruits))
    fmt.Println(fruits)
}

執行&輸出



# 運行這個程序,和預期的一樣,顯示了一個按照字符串
# 長度排序的列表。
$ go run sorting-by-functions.go 
[kiwi peach banana]

# 類似的,參照這個創建一個自定義類型的方法,實現這個類型的
# 這三個接口方法,然後在一個這個自定義類型的集合上調用 
# `sort.Sort` 方法,我們就可以使用任意的函數來排序 Go 切片了。

課程導航

學習上一篇:Go語言教程:排序    學習下一篇:Go語言教程:Panic

相關資料

本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/sorting-by-functions

Go語言使用自定義函數排序

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/4078.html,未經允許,請勿轉載。