github.com/everdrone/grab@v0.1.7-0.20230416223925-40674b995521/internal/utils/slices.go (about)

     1  package utils
     2  
     3  func Filter[T any](s []T, test func(T) bool) []T {
     4  	var filtered []T
     5  	for _, v := range s {
     6  		if test(v) {
     7  			filtered = append(filtered, v)
     8  		}
     9  	}
    10  	return filtered
    11  }
    12  
    13  func Unique(s []string) []string {
    14  	var unique []string
    15  	for _, val := range s {
    16  		if !Contains(unique, val) {
    17  			unique = append(unique, val)
    18  		}
    19  	}
    20  	return unique
    21  }
    22  
    23  func Contains(s []string, v string) bool {
    24  	for _, val := range s {
    25  		if val == v {
    26  			return true
    27  		}
    28  	}
    29  	return false
    30  }
    31  
    32  func Any[T any](s []T, test func(T) bool) bool {
    33  	for _, v := range s {
    34  		if test(v) {
    35  			return true
    36  		}
    37  	}
    38  	return false
    39  }
    40  
    41  func All[T any](s []T, test func(T) bool) bool {
    42  	if len(s) == 0 {
    43  		return false
    44  	}
    45  
    46  	for _, v := range s {
    47  		if !test(v) {
    48  			return false
    49  		}
    50  	}
    51  	return true
    52  }
    53  
    54  func ZipMap(keys []string, values []string) map[string]string {
    55  	if len(keys) != len(values) {
    56  		panic("keys and values must be the same length")
    57  	}
    58  
    59  	m := make(map[string]string, len(keys))
    60  	for i, key := range keys {
    61  		m[key] = values[i]
    62  	}
    63  	return m
    64  }