github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/godash/string_slice.go (about)

     1  package godash
     2  
     3  type StringMapper func(item string, i int) string
     4  type StringChecker func(item string, i int) bool
     5  
     6  func StringMap(list []string, mapper StringMapper) []string {
     7  	newList := []string{}
     8  	for i, item := range list {
     9  		newList = append(newList, mapper(item, i))
    10  	}
    11  	return newList
    12  }
    13  
    14  func StringPartition(list []string, checker StringChecker) ([]string, []string) {
    15  	newLeftList := []string{}
    16  	newRightList := []string{}
    17  	for i, item := range list {
    18  		if checker(item, i) {
    19  			newLeftList = append(newLeftList, item)
    20  		} else {
    21  			newRightList = append(newRightList, item)
    22  		}
    23  	}
    24  	return newLeftList, newRightList
    25  }
    26  
    27  func StringFilter(list []string, checker StringChecker) []string {
    28  	newList, _ := StringPartition(list, checker)
    29  	return newList
    30  }
    31  
    32  func StringUniq(list []string) (result []string) {
    33  	strMap := make(map[string]bool)
    34  	for _, str := range list {
    35  		strMap[str] = true
    36  	}
    37  
    38  	for i := range list {
    39  		str := list[i]
    40  		if _, ok := strMap[str]; ok {
    41  			delete(strMap, str)
    42  			result = append(result, str)
    43  		}
    44  	}
    45  	return
    46  }
    47  
    48  func StringReject(list []string, checker StringChecker) []string {
    49  	_, newList := StringPartition(list, checker)
    50  	return newList
    51  }
    52  
    53  func StringEvery(list []string, checker StringChecker) bool {
    54  	var checked = true
    55  	for i, item := range list {
    56  		checked = checked && checker(item, i)
    57  	}
    58  	return checked
    59  }
    60  
    61  func StringSome(list []string, checker StringChecker) bool {
    62  	for i, item := range list {
    63  		if checker(item, i) {
    64  			return true
    65  		}
    66  	}
    67  	return false
    68  }
    69  
    70  func StringIncludes(list []string, target string) bool {
    71  	return StringSome(list, func(item string, i int) bool {
    72  		return item == target
    73  	})
    74  }
    75  
    76  func StringFind(list []string, checker StringChecker) string {
    77  	for i, item := range list {
    78  		if checker(item, i) {
    79  			return item
    80  		}
    81  	}
    82  	return ""
    83  }