卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章50719本站已运行31123

golang可变参数是否可以用于泛型函数?

在 go 中,变参可以用于泛型函数,允许创建可接受可变数量参数且适用于多种类型的泛型函数。例如,您可以创建泛型函数 mode,它查找给定列表中出现次数最多的元素:mode 接受可变数量的 t 类型元素。它通过为每个元素创建 counts 来统计元素计数。然后它找出出现次数最多的元素,并将其作为 mode 返回。在 main 函数中,可以为字符串列表和整数列表调用 mode 函数,它将分别返回出现次数最多的字符串和数字。

golang可变参数是否可以用于泛型函数?

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(对于整数列表)。
卓越飞翔博客
上一篇: C++ 成员函数详解:对象方法的内存管理与生命周期
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏