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 }