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  }