markoczy

Go 1.18 Playground

Jan 13th, 2022 (edited)
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.07 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "strconv"
  6. )
  7.  
  8. // This playground uses a development build of Go:
  9. // devel go1.18-3d3f5d912b Wed Jan 12 01:49:33 2022 +0000
  10.  
  11. func Map[T, R any](s []T, fn func(T)R) []R {
  12.   var ret []R
  13.   for _, v := range s {
  14.     ret = append(ret, fn(v))
  15.   }
  16.   return ret
  17. }
  18.  
  19. func Filter[T any](s []T, fn func(T) bool) []T {
  20.   var ret []T
  21.   for _, v := range s {
  22.     if fn(v) {
  23.       ret = append(ret, v)
  24.     }
  25.   }
  26.   return ret
  27. }
  28.  
  29. func Collect[T, R any](s []T, acc R, fn func(T, R) R) R {
  30.   ret := acc
  31.   for _, v := range s {
  32.     ret = fn(v, ret)
  33.   }
  34.   return ret
  35. }
  36.  
  37. func tryParse[T,R any](input T, parser func(T) (R, error)) R {
  38.   r, _ := parser(input)
  39.   return r
  40. }
  41.  
  42. func main() {
  43.   k := []string{"a","b","c"}
  44.   r := Map(k, func(s string) string {
  45.     return "x"+s
  46.   })
  47.   fmt.Println(r)
  48.   r = Filter(k, func(s string) bool {
  49.     return s == "a"
  50.   })
  51.   fmt.Println(r)
  52.   x := []int{1,2,3}
  53.   sum := Collect(x, 0, func(a,b int) int {
  54.     return a+b
  55.   })
  56.   fmt.Println(sum)
  57.   p := tryParse("12",strconv.Atoi)
  58.   fmt.Println(p)
  59. }
  60.  
Add Comment
Please, Sign In to add comment