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  }