gopkg.in/essentialkaos/ek.v5@v5.7.1/sliceutil/sliceutil.go (about) 1 // Package sliceutil provides methods for working with slices 2 package sliceutil 3 4 // ////////////////////////////////////////////////////////////////////////////////// // 5 // // 6 // Copyright (c) 2009-2016 Essential Kaos // 7 // Essential Kaos Open Source License <http://essentialkaos.com/ekol?en> // 8 // // 9 // ////////////////////////////////////////////////////////////////////////////////// // 10 11 import ( 12 "errors" 13 ) 14 15 // ////////////////////////////////////////////////////////////////////////////////// // 16 17 // StringToInterface convert slice with strings to slice with interface{} 18 func StringToInterface(data []string) []interface{} { 19 var result []interface{} 20 21 for _, r := range data { 22 result = append(result, r) 23 } 24 25 return result 26 } 27 28 // IntToInterface convert slice with ints to slice with interface{} 29 func IntToInterface(data []int) []interface{} { 30 var result []interface{} 31 32 for _, r := range data { 33 result = append(result, r) 34 } 35 36 return result 37 } 38 39 // StringToError convert slice with strings to slice with errors 40 func StringToError(data []string) []error { 41 var result []error 42 43 for _, e := range data { 44 result = append(result, errors.New(e)) 45 } 46 47 return result 48 } 49 50 // ErrorToString convert slice with errors to slice with strings 51 func ErrorToString(data []error) []string { 52 var result []string 53 54 for _, e := range data { 55 result = append(result, e.Error()) 56 } 57 58 return result 59 } 60 61 // Contains check if string slice contains some value 62 func Contains(slice []string, value string) bool { 63 if len(slice) == 0 { 64 return false 65 } 66 67 for _, v := range slice { 68 if v == value { 69 return true 70 } 71 } 72 73 return false 74 } 75 76 // Exclude return slice without items in second given slice 77 func Exclude(slice []string, items []string) []string { 78 var result []string 79 80 LOOP: 81 for _, i := range slice { 82 for _, j := range items { 83 if i == j { 84 continue LOOP 85 } 86 } 87 88 result = append(result, i) 89 } 90 91 return result 92 } 93 94 // Deduplicate return slice without duplicates. Given slice must be sorted 95 // before deduplication 96 func Deduplicate(slice []string) []string { 97 sliceLen := len(slice) 98 99 if sliceLen <= 1 { 100 return slice 101 } 102 103 var ( 104 result []string 105 lastItem string 106 ) 107 108 for _, v := range slice { 109 if lastItem == v { 110 continue 111 } 112 113 result = append(result, v) 114 lastItem = v 115 } 116 117 return result 118 }