Skip to content

Commit

Permalink
feat: arrutil - add new util func StringsFilter()
Browse files Browse the repository at this point in the history
  • Loading branch information
inhere committed Jul 11, 2022
1 parent c9cb093 commit 71b3271
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
31 changes: 28 additions & 3 deletions arrutil/arrutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
// Reverse string slice [site user info 0] -> [0 info user site]
func Reverse(ss []string) {
ln := len(ss)

for i := 0; i < ln/2; i++ {
li := ln - i - 1
// fmt.Println(i, "<=>", li)
Expand All @@ -27,15 +26,38 @@ func StringsRemove(ss []string, s string) []string {
ns = append(ns, v)
}
}
return ns
}

// StringsFilter given strings, default will filter emtpy string.
//
// Usage:
// // output: [a, b]
// ss := arrutil.StringsFilter([]string{"a", "", "b", ""})
func StringsFilter(ss []string, filter ...func(s string) bool) []string {
var fn func(s string) bool
if len(filter) > 0 && filter[0] != nil {
fn = filter[0]
} else {
fn = func(s string) bool {
return s != ""
}
}

ns := make([]string, 0, len(ss))
for _, s := range ss {
if fn(s) {
ns = append(ns, s)
}
}
return ns
}

// TrimStrings trim string slice item.
//
// Usage:
// // output: [a, b, c]
// ss = arrutil.TrimStrings([]string{",a", "b.", ",.c,"}, ",.")
// ss := arrutil.TrimStrings([]string{",a", "b.", ",.c,"}, ",.")
func TrimStrings(ss []string, cutSet ...string) (ns []string) {
cutSetLn := len(cutSet)
hasCutSet := cutSetLn > 0 && cutSet[0] != ""
Expand All @@ -59,7 +81,10 @@ func TrimStrings(ss []string, cutSet ...string) (ns []string) {
}

// GetRandomOne get random element from an array/slice
func GetRandomOne(arr interface{}) interface{} {
func GetRandomOne(arr interface{}) interface{} { return RandomOne(arr) }

// RandomOne get random element from an array/slice
func RandomOne(arr interface{}) interface{} {
rv := reflect.ValueOf(arr)
if rv.Kind() != reflect.Slice && rv.Kind() != reflect.Array {
return arr
Expand Down
7 changes: 7 additions & 0 deletions arrutil/arrutil_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ func TestStringsRemove(t *testing.T) {
assert.Len(t, ns, 2)
}

func TestStringsFilter(t *testing.T) {
is := assert.New(t)

ss := arrutil.StringsFilter([]string{"a", "", "b", ""})
is.Equal([]string{"a", "b"}, ss)
}

func TestTrimStrings(t *testing.T) {
is := assert.New(t)

Expand Down

0 comments on commit 71b3271

Please sign in to comment.