| | |
| | |
| | |
| |
|
| | |
| | package slices |
| |
|
| | |
| | func Map[T1, T2 any](s []T1, f func(T1) T2) []T2 { |
| | r := make([]T2, len(s)) |
| | for i, v := range s { |
| | r[i] = f(v) |
| | } |
| | return r |
| | } |
| |
|
| | |
| | func Reduce[T1, T2 any](s []T1, initializer T2, f func(T2, T1) T2) T2 { |
| | r := initializer |
| | for _, v := range s { |
| | r = f(r, v) |
| | } |
| | return r |
| | } |
| |
|
| | |
| | func Filter[T any](s []T, f func(T) bool) []T { |
| | var r []T |
| | for _, v := range s { |
| | if f(v) { |
| | r = append(r, v) |
| | } |
| | } |
| | return r |
| | } |
| |
|
| | |
| |
|
| | func limiter(x int) byte { |
| | switch { |
| | case x < 0: |
| | return 0 |
| | default: |
| | return byte(x) |
| | case x > 255: |
| | return 255 |
| | } |
| | } |
| |
|
| | var input = []int{-4, 68954, 7, 44, 0, -555, 6945} |
| | var limited1 = Map[int, byte](input, limiter) |
| | var limited2 = Map(input, limiter) |
| |
|
| | func reducer(x float64, y int) float64 { |
| | return x + float64(y) |
| | } |
| |
|
| | var reduced1 = Reduce[int, float64](input, 0, reducer) |
| | var reduced2 = Reduce(input, 1i, reducer) |
| | var reduced3 = Reduce(input, 1, reducer) |
| |
|
| | func filter(x int) bool { |
| | return x&1 != 0 |
| | } |
| |
|
| | var filtered1 = Filter[int](input, filter) |
| | var filtered2 = Filter(input, filter) |
| |
|
| |
|