在Golang中使用泛型reduce函式 - gosamples
reduce()函式是由 JavaScript 和 Python 等其他程式語言推廣的函數語言程式設計概念。
它的工作原理是透過對陣列中的每個元素應用一個產生部分結果的函式,將一個陣列還原成一個單一的值。最後一項之後的結果是整個列表的累積值。
到目前為止,在 Go 中,建立這種適用於不同型別的函式並不容易。然而,隨著引入泛型的 Go 1.18 版本,這不再是一個問題。
package main import ( "fmt" ) func reduce[T, M any](s T, f func(M, T) M, initValue M) M { acc := initValue for _, v := range s { acc = f(acc, v) } return acc } func main() { numbers := int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} sum := reduce(numbers, func(acc, current int) int { return acc + current }, 0) fmt.Println(sum) divided := reduce(numbers, func(acc float64, current int) float64 { return acc + float64(current)/10.0 }, 0) fmt.Println(divided) } 輸出: 55 5.5 |
讓我們看一下這個例子。reduce()函式的引數是
- 一個any型別T的slice
- 一個任意型別的初始值M,它是我們的累加器的起始值--用於累加還原器函式呼叫的部分結果的值。請注意,累加器的型別不需要和slice的型別相同。
- 一個reducer函式,接收累積器和slice的當前值,並返回新的累積器。
因此,我們建立了一個與其他語言中已知的reduce()工作類似的函式。
在main()的第一個例子中,它被用來對一個slice的數字進行求和,在第二個例子中,對同一個slice進行求和,每個值被除以10,結果是float64而不是int。
相關文章
- 在Golang中使用泛型從任何map中獲取鍵的sliceGolang泛型
- Java函式泛型List引數,操作泛型元素Java函式泛型
- Java泛型建構函式Java泛型函式
- Golang 泛型初探Golang泛型
- 【譯】在非泛型類中建立泛型方法泛型
- Golang面試:泛型Golang面試泛型
- Golang 中函式作為值與型別(轉載)Golang函式型別
- golang函式使用基礎Golang函式
- C 語言實現泛型 swap 函式泛型函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- python內建函式 map/reducePython函式
- 學習一下Array.reduce函式的使用函式
- js中實現單分派泛函式JS函式
- Golang 基礎之函式使用 (三)Golang函式
- Golang 基礎之函式使用 (一)Golang函式
- Golang 基礎之函式使用 (二)Golang函式
- Array高階函式reduce&filter函式Filter
- Python巢狀定義函式增強reduce()函式功能Python巢狀函式
- HarmonyOS 專案中泛型的使用泛型
- Golang匿名函式Golang函式
- Golang init() 函式Golang函式
- python之高階函式map,reduce,filter用法Python函式Filter
- javascript高階函式---filter---map---reduceJavaScript函式Filter
- JavaScript(1)高階函式filter、map、reduceJavaScript函式Filter
- Java中泛型的詳細解析,深入分析泛型的使用方式Java泛型
- python使用泛型Python泛型
- 預計在 Go 1.18 中內建泛型Go泛型
- 使用 Go 泛型的函數語言程式設計Go泛型函數程式設計
- golang中的init初始化函式Golang函式
- 在 bash 中使用函式函式
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- 在Vue3.0+ts中如何使用h函式Vue函式
- 理解Swift高階函式之map, filter, reduceSwift函式Filter
- Golang泛型是更快了還是慢了? - DoltHubGolang泛型
- 泛型使用場景泛型
- 泛型物件的使用泛型物件
- Go 官方出品泛型教程:如何開始使用泛型Go泛型
- 函式式思維(二)-- 為何你想不到用 reduce函式