github.com/diadata-org/diadata@v1.4.593/pkg/utils/strings.go (about) 1 package utils 2 3 // UniqueStrings returns a subslice of @s such that each entry only appears once 4 func UniqueStrings(s []string) []string { 5 if len(s) == 0 { 6 return []string{} 7 } 8 set := make(map[string]struct{}) 9 sUnique := []string{} 10 for _, val := range s { 11 if _, ok := set[val]; !ok { 12 sUnique = append(sUnique, val) 13 set[val] = struct{}{} 14 } 15 } 16 return sUnique 17 } 18 19 // Contains takes a slice of strings and a string and checks if it is contained in the slice. 20 func Contains(s *[]string, str string) bool { 21 if s == nil { 22 return false 23 } 24 for _, a := range *s { 25 if a == str { 26 return true 27 } 28 } 29 return false 30 } 31 32 // SliceDifference returns the elements in @slice1 that aren't in @slice2. 33 func SliceDifference(slice1, slice2 []string) []string { 34 var diff []string 35 for _, str := range slice1 { 36 if !Contains(&slice2, str) { 37 diff = append(diff, str) 38 } 39 } 40 return diff 41 } 42 43 // MaxString return the maximum of a slice of strings along with its index 44 func MaxString(sl []string) (string, int64) { 45 if len(sl) < 1 { 46 log.Error("Cannot find maximum in empty slice") 47 return "", 0 48 } 49 index := int64(0) 50 max := sl[0] 51 for k, entry := range sl { 52 if entry > max { 53 max = entry 54 index = int64(k) 55 } 56 } 57 return max, index 58 } 59 60 // MinString return the maximum of a slice of strings along with its index 61 func MinString(sl []string) (string, int64) { 62 if len(sl) < 1 { 63 log.Error("Cannot find minimum in empty slice") 64 return "", 0 65 } 66 index := int64(0) 67 min := sl[0] 68 for k, entry := range sl { 69 if entry < min { 70 min = entry 71 index = int64(k) 72 } 73 } 74 return min, index 75 } 76 77 func CheckDuplicates(arr []string) bool { 78 encountered := map[string]bool{} 79 for i := 0; i < len(arr); i++ { 80 if encountered[arr[i]] { 81 return true 82 } 83 encountered[arr[i]] = true 84 } 85 return false 86 }