github.com/agrigoryan/aoc_2023_go@v0.0.0-20231216221323-4ace361ec685/aocutils/func.go (about)

     1  package aocutils
     2  
     3  func Filter[T any](arr []T, filter func(T) bool) []T {
     4  	filtered := []T{}
     5  	for _, item := range arr {
     6  		if filter(item) {
     7  			filtered = append(filtered, item)
     8  		}
     9  	}
    10  	return filtered
    11  }
    12  
    13  func Map[T any, R any](arr []T, transform func(T) R) []R {
    14  	transformed := []R{}
    15  	for _, item := range arr {
    16  		transformed = append(transformed, transform(item))
    17  	}
    18  	return transformed
    19  }
    20  
    21  func Mapper[T any, R any](transform func(T) R) func([]T) []R {
    22  	return func(arr []T) []R {
    23  		transformed := []R{}
    24  		for _, item := range arr {
    25  			transformed = append(transformed, transform(item))
    26  		}
    27  		return transformed
    28  	}
    29  }
    30  
    31  func Filterer[T any](filter func(T) bool) func([]T) []T {
    32  	return func(arr []T) []T {
    33  		filtered := []T{}
    34  		for _, item := range arr {
    35  			if filter(item) {
    36  				filtered = append(filtered, item)
    37  			}
    38  		}
    39  		return filtered
    40  	}
    41  }