Maison  >  Article  >  développement back-end  >  Les paramètres variables Golang peuvent-ils être utilisés dans des fonctions génériques ?

Les paramètres variables Golang peuvent-ils être utilisés dans des fonctions génériques ?

PHPz
PHPzoriginal
2024-04-29 14:06:01375parcourir

Dans Go, les paramètres variables peuvent être utilisés pour des fonctions génériques, permettant la création de fonctions génériques acceptant un nombre variable de paramètres et adaptées à plusieurs types. Par exemple, vous pouvez créer une fonction générique Mode qui recherche l'élément le plus fréquent dans une liste donnée : Mode accepte un nombre variable d'éléments de type T. Il compte les éléments en créant des comptes pour chaque élément. Ensuite, il trouve l'élément qui apparaît le plus et le renvoie en mode. Dans la fonction principale, vous pouvez appeler la fonction Mode pour une liste de chaînes et une liste d'entiers, qui renverront respectivement la chaîne et le nombre les plus fréquents.

Les paramètres variables Golang peuvent-ils être utilisés dans des fonctions génériques ?

Fonctions génériques avec paramètres variadiques dans Go

Préface

Les génériques ont été introduits dans Go 1.18, nous permettant de créer des fonctions et des types qui ne dépendent pas de paramètres de types spécifiques. Cet article de blog explorera si les paramètres variables dans Go sont adaptés aux fonctions génériques et fournira un cas pratique.

Varameters

Une fonction variadique est une fonction qui accepte un nombre variable de paramètres. Dans Go, les paramètres variables sont généralement exprimés à l'aide de la syntaxe ..., par exemple : ... 语法表示,例如:

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 函数中,我们创建了两个列表:一个字符串列表和一个整数列表,并为每个列表调用了 Moderrreee
  • Fonction générique
🎜Une fonction générique est une fonction dont le type de paramètre peut être spécifié. Dans Go, les fonctions génériques sont exprimées en utilisant la syntaxe [], par exemple : 🎜rrreee🎜🎜Paramètres variables et génériques🎜🎜🎜Les paramètres variables et génériques peuvent être utilisés ensemble dans Go, nous permettant de créer un fonction générique qui accepte un nombre variable d'arguments et fonctionne avec de nombreux types. 🎜🎜🎜Cas pratique🎜🎜🎜🎜Objectif de la tâche : 🎜Créer une fonction générique pour trouver l'élément avec le plus d'occurrences dans une liste donnée. 🎜🎜🎜Code : 🎜🎜rrreee🎜🎜Description : 🎜🎜
    🎜La fonction Mode est une fonction générique qui accepte un nombre variable d'éléments de type T. 🎜🎜Il renvoie l'élément avec le plus d'occurrences et compte les occurrences de chaque élément en counts. 🎜🎜Dans la fonction main, nous créons deux listes : une liste de chaînes et une liste d'entiers, et appelons la fonction Mode pour chaque liste. 🎜🎜Le résultat montre que les éléments les plus fréquents sont "apple" (pour la liste des chaînes) et 2 (pour la liste des entiers). 🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn