Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "strconv"
- )
- // This playground uses a development build of Go:
- // devel go1.18-3d3f5d912b Wed Jan 12 01:49:33 2022 +0000
- func Map[T, R any](s []T, fn func(T)R) []R {
- var ret []R
- for _, v := range s {
- ret = append(ret, fn(v))
- }
- return ret
- }
- func Filter[T any](s []T, fn func(T) bool) []T {
- var ret []T
- for _, v := range s {
- if fn(v) {
- ret = append(ret, v)
- }
- }
- return ret
- }
- func Collect[T, R any](s []T, acc R, fn func(T, R) R) R {
- ret := acc
- for _, v := range s {
- ret = fn(v, ret)
- }
- return ret
- }
- func tryParse[T,R any](input T, parser func(T) (R, error)) R {
- r, _ := parser(input)
- return r
- }
- func main() {
- k := []string{"a","b","c"}
- r := Map(k, func(s string) string {
- return "x"+s
- })
- fmt.Println(r)
- r = Filter(k, func(s string) bool {
- return s == "a"
- })
- fmt.Println(r)
- x := []int{1,2,3}
- sum := Collect(x, 0, func(a,b int) int {
- return a+b
- })
- fmt.Println(sum)
- p := tryParse("12",strconv.Atoi)
- fmt.Println(p)
- }
Add Comment
Please, Sign In to add comment