在 go 中,變參可以用于泛型函數,允許創建可接受可變數量參數且適用于多種類型的泛型函數。例如,您可以創建泛型函數 mode,它查找給定列表中出現次數最多的元素:mode 接受可變數量的 t 類型元素。它通過為每個元素創建 counts 來統計元素計數。然后它找出出現次數最多的元素,并將其作為 mode 返回。在 main 函數中,可以為字符串列表和整數列表調用 mode 函數,它將分別返回出現次數最多的字符串和數字。
Go 中變參的泛型函數
前言
泛型在 Go 1.18 中引入,允許我們創建不依賴于特定類型參數的函數和類型。這篇博文將探討 Go 中變參是否適用于泛型函數,并提供一個實戰案例。
變參
變參函數是接受可變數量參數的函數。在 Go 中,變參通常使用 ...
語法表示,例如:
func Sum(nums ...int) int { sum := 0 for _, num := range nums { sum += num } return sum }
登錄后復制
泛型函數
泛型函數是參數類型可指定的函數。在 Go 中,泛型函數使用 []
語法表示,例如:
func Max[T comparable](values ...T) T { max := values[0] for _, value := range values { if value > max { max = value } } return max }
登錄后復制
變參和泛型
變參和泛型在 Go 中可以一起使用,允許我們創建可接受可變數量參數且適用于多種類型的泛型函數。
實戰案例
任務目標:創建泛型函數來查找給定列表中出現次數最多的元素。
代碼:
import "fmt" func Mode[T comparable](values ...T) T { counts := map[T]int{} var mode T var maxCount int // 統計元素計數 for _, value := range values { counts[value]++ } // 找出出現次數最多的元素 for value, count := range counts { if count > maxCount { maxCount = count mode = value } } return mode } func main() { // 字符串列表 strs := []string{"apple", "orange", "apple", "pear", "banana"} fmt.Println("最常見的字符串:", Mode(strs...)) // apple // 整數列表 nums := []int{1, 2, 3, 2, 4, 2, 5} fmt.Println("最常見的數字:", Mode(nums...)) // 2 }
登錄后復制
說明:
Mode
函數是一個泛型函數,接受可變數量的 T
類型元素。
它返回出現次數最多的元素,并在 counts
中統計每個元素的出現次數。
在 main
函數中,我們創建了兩個列表:一個字符串列表和一個整數列表,并為每個列表調用了 Mode
函數。
輸出顯示了出現次數最多的元素為 “apple”(對于字符串列表)和 2(對于整數列表)。