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 }