Heim  >  Artikel  >  Backend-Entwicklung  >  Können Golang-Variablenparameter in generischen Funktionen verwendet werden?

Können Golang-Variablenparameter in generischen Funktionen verwendet werden?

PHPz
PHPzOriginal
2024-04-29 14:06:01333Durchsuche

In Go können variable Parameter für generische Funktionen verwendet werden, wodurch generische Funktionen erstellt werden können, die eine variable Anzahl von Parametern akzeptieren und für mehrere Typen geeignet sind. Sie können beispielsweise eine generische Funktion Mode erstellen, die das am häufigsten vorkommende Element in einer bestimmten Liste findet: Mode akzeptiert eine variable Anzahl von Elementen vom Typ T. Es zählt Elemente, indem es Zählungen für jedes Element erstellt. Dann findet es das Element, das am häufigsten vorkommt, und gibt es als Modus zurück. In der Hauptfunktion können Sie die Mode-Funktion für eine Liste von Zeichenfolgen und eine Liste von Ganzzahlen aufrufen, die jeweils die häufigste Zeichenfolge und Zahl zurückgibt.

Können Golang-Variablenparameter in generischen Funktionen verwendet werden?

Generische Funktionen mit variadischen Parametern in Go

Vorwort

Generika wurden in Go 1.18 eingeführt, sodass wir Funktionen und Typen erstellen können, die nicht auf Parametern bestimmter Typen basieren. In diesem Blogbeitrag wird untersucht, ob variable Parameter in Go für generische Funktionen geeignet sind, und ein praktischer Fall bereitgestellt.

Varameter

Eine variadische Funktion ist eine Funktion, die eine variable Anzahl von Parametern akzeptiert. In Go werden variable Parameter normalerweise mit der Syntax ... ausgedrückt, zum Beispiel: ... 语法表示,例如:

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
  • Generische Funktion
🎜Eine generische Funktion ist eine Funktion, deren Parametertyp angegeben werden kann. In Go werden generische Funktionen mit der Syntax [] ausgedrückt, zum Beispiel: 🎜rrreee🎜🎜Variable Parameter und Generics🎜🎜🎜Variable Parameter und Generics können in Go zusammen verwendet werden, sodass wir A generische Funktion, die eine variable Anzahl von Argumenten akzeptiert und mit vielen Typen funktioniert. 🎜🎜🎜Praktischer Fall🎜🎜🎜🎜Aufgabenziel: 🎜Erstellen Sie eine generische Funktion, um das Element mit den meisten Vorkommen in einer bestimmten Liste zu finden. 🎜🎜🎜Code: 🎜🎜rrreee🎜🎜Beschreibung: 🎜🎜
    🎜Mode-Funktion ist eine generische Funktion, die eine variable Anzahl von Elementen vom Typ T akzeptiert. 🎜🎜Es gibt das Element mit den meisten Vorkommen zurück und zählt die Vorkommen jedes Elements in counts. 🎜🎜In der Funktion main erstellen wir zwei Listen: eine Liste mit Zeichenfolgen und eine Liste mit Ganzzahlen und rufen für jede Liste die Funktion Mode auf. 🎜🎜Die Ausgabe zeigt, dass die häufigsten Elemente „apple“ (für die Liste der Zeichenfolgen) und 2 (für die Liste der Ganzzahlen) sind. 🎜🎜

Das obige ist der detaillierte Inhalt vonKönnen Golang-Variablenparameter in generischen Funktionen verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn