在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函式泛型
- Golang 泛型初探Golang泛型
- Java泛型建構函式Java泛型函式
- reduce與redux中compose函式Redux函式
- 【譯】在非泛型類中建立泛型方法泛型
- Python 中的map、reduce函式用法Python函式
- Golang 中函式作為值與型別(轉載)Golang函式型別
- Swift 中的泛型使用Swift泛型
- C 語言實現泛型 swap 函式泛型函式
- 在泛型中得到T.class泛型
- 在Excel中如何使用TEXT函式?Excel函式
- GOLANG寬泛介面在測試中的大用處Golang
- C# 泛型 new()建構函式約束C#泛型函式
- js中實現單分派泛函式JS函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- HarmonyOS 專案中泛型的使用泛型
- Golang 基礎之函式使用 (三)Golang函式
- Golang 基礎之函式使用 (二)Golang函式
- Golang 基礎之函式使用 (一)Golang函式
- Array高階函式reduce&filter函式Filter
- python內建函式 map/reducePython函式
- Java中泛型的詳細解析,深入分析泛型的使用方式Java泛型
- JAVA泛型使用練習2(自定義泛型使用)Java泛型
- jQuery使用最廣泛的javascript函式庫jQueryJavaScript函式
- Golang init() 函式Golang函式
- Golang匿名函式Golang函式
- golang中的init初始化函式Golang函式
- [CUJ]泛型程式設計--轉移建構函式 (轉)泛型程式設計函式
- Python巢狀定義函式增強reduce()函式功能Python巢狀函式
- JavaScript(1)高階函式filter、map、reduceJavaScript函式Filter
- javascript高階函式---filter---map---reduceJavaScript函式Filter
- Swift集合函式:Reduce、Map、FlatMap、FilterSwift函式Filter
- 預計在 Go 1.18 中內建泛型Go泛型
- 使用 Go 泛型的函數語言程式設計Go泛型函數程式設計
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- 泛型鏈式堆疊泛型