github.com/seeker-insurance/kit@v0.0.13/imath/functional.go (about) 1 package imath 2 3 //Map (f, a) returns a slice containing f(n) for every n in a 4 func Map(f func(int) int, a []int) []int { 5 mapped := make([]int, len(a)) 6 for i, n := range a { 7 mapped[i] = f(n) 8 } 9 return mapped 10 } 11 12 //Filter (f, a) returns a slice containing n for all n where f(n) == true 13 func Filter(f func(int) bool, a []int) []int { 14 filtered := make([]int, 0, len(a)) 15 for _, n := range a { 16 if f(n) { 17 filtered = append(filtered, n) 18 } 19 } 20 return filtered 21 } 22 23 func Reduce(f func(int, int) int, start int, a ...int) int { 24 reduced := start 25 for _, n := range a { 26 reduced = f(reduced, n) 27 } 28 return reduced 29 } 30 31 //Accumulate returns a slice B where B[i] = Reduce(f, a[:i+1]). 32 func Accumulate(f func(int, int) int, a []int) []int { 33 accumulated := make([]int, len(a)) 34 if len(a) == 0 { 35 return accumulated 36 } 37 accumulated[0] = a[0] 38 for i, n := range a[1:] { 39 accumulated[i+1] = f(accumulated[i], n) 40 } 41 return accumulated 42 }