arrutil

package
v0.7.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 24, 2025 License: MIT Imports: 10 Imported by: 60

README

Array/Slice Utils

Install

go get github.com/gookit/goutil/arrutil

Go docs

Functions API

Note: doc by run go doc ./arrutil

func AnyToString(arr any) string
func CloneSlice(data any) interface{}
func Contains(arr, val any) bool
func ExceptWhile(data any, fn Predicate) interface{}
func Excepts(first, second any, fn Comparer) interface{}
func Find(source any, fn Predicate) (interface{}, error)
func FindOrDefault(source any, fn Predicate, defaultValue any) interface{}
func FormatIndent(arr any, indent string) string
func GetRandomOne(arr any) interface{}
func HasValue(arr, val any) bool
func InStrings(elem string, ss []string) bool
func Int64sHas(ints []int64, val int64) bool
func Intersects(first any, second any, fn Comparer) interface{}
func IntsHas(ints []int, val int) bool
func JoinSlice(sep string, arr ...any) string
func JoinStrings(sep string, ss ...string) string
func MakeEmptySlice(itemType reflect.Type) interface{}
func Map[T any, V any](list []T, mapFn func(obj T) (val V, find bool)) []V
func Column[T any, V any](list []T, mapFn func(obj T) (val V, find bool)) []V
func MustToInt64s(arr any) []int64
func MustToStrings(arr any) []string
func NotContains(arr, val any) bool
func RandomOne(arr any) interface{}
func Reverse(ss []string)
func SliceToInt64s(arr []any) []int64
func SliceToString(arr ...any) string
func SliceToStrings(arr []any) []string
func StringsFilter(ss []string, filter ...func(s string) bool) []string
func StringsHas(ss []string, val string) bool
func StringsJoin(sep string, ss ...string) string
func StringsMap(ss []string, mapFn func(s string) string) []string
func StringsRemove(ss []string, s string) []string
func StringsToInts(ss []string) (ints []int, err error)
func StringsToSlice(ss []string) []interface{}
func TakeWhile(data any, fn Predicate) interface{}
func ToInt64s(arr any) (ret []int64, err error)
func ToString(arr []any) string
func ToStrings(arr any) (ret []string, err error)
func TrimStrings(ss []string, cutSet ...string) []string
func TwowaySearch(data any, item any, fn Comparer) (int, error)
func Union(first, second any, fn Comparer) interface{}
func Unique(arr any) interface{}
type ArrFormatter struct{ ... }
    func NewFormatter(arr any) *ArrFormatter

Code Check & Testing

gofmt -w -l ./
golint ./...

Testing:

go test -v ./cliutil/...

Test limit by regexp:

go test -v -run ^TestSetByKeys ./cliutil/...

Refers

Documentation

Overview

Package arrutil provides some util functions for array, slice

Index

Constants

This section is empty.

Variables

View Source
var ErrElementNotFound = errors.New("element not found")

ErrElementNotFound is the error returned when the element is not found.

View Source
var ErrInvalidType = errors.New("the input param type is invalid")

ErrInvalidType error

Functions

func AnyToSlice added in v0.6.9

func AnyToSlice(sl any) (ls []any, err error)

AnyToSlice convert any(allow: array,slice) to []any

func AnyToString added in v0.5.2

func AnyToString(arr any) string

AnyToString simple and quickly convert any array, slice to string

func AnyToStrings added in v0.6.2

func AnyToStrings(arr any) []string

AnyToStrings convert array or slice to []string

func CloneSlice added in v0.5.3

func CloneSlice[T any](data []T) []T

CloneSlice Clone a slice.

data: the slice to clone.
returns: the cloned slice.

func Column added in v0.6.0

func Column[T any, V any](list []T, mapFn func(obj T) (val V, find bool)) []V

Column alias of Map func

func CombineToMap added in v0.6.9

func CombineToMap[K comdef.SortedType, V any](keys []K, values []V) map[K]V

CombineToMap combine []K and []V slice to map[K]V.

If keys length is greater than values, the extra keys will be ignored.

func CombineToSMap added in v0.6.5

func CombineToSMap(keys, values []string) map[string]string

CombineToSMap combine two string-slice to map[string]string

func Contains added in v0.3.6

func Contains(arr, val any) bool

Contains check slice/array(strings, intXs, uintXs) should be contained the given value(int(X),string).

TIP: Difference the In(), Contains() will try to convert value type, and Contains() support array type.

func ContainsAll added in v0.6.2

func ContainsAll[T comdef.ScalarType](list, values []T) bool

ContainsAll check given values is sub-list of sample list.

func ConvType added in v0.6.2

func ConvType[T any, R any](arr []T, newElemTyp R) ([]R, error)

ConvType convert type of slice elements to new type slice, by the given newElemTyp type.

Supports conversion between []string, []intX, []uintX, []floatX.

Usage:

ints, _ := arrutil.ConvType([]string{"12", "23"}, 1) // []int{12, 23}

func Diff added in v0.6.12

func Diff[T any](first, second []T, fn Comparer[T]) []T

Diff Produces the set difference of two slice according to a comparer function. alias of Differences

func Differences added in v0.6.5

func Differences[T any](first, second []T, fn Comparer[T]) []T

Differences Produces the set difference of two slice according to a comparer function.

  • first: the first slice. MUST BE A SLICE.
  • second: the second slice. MUST BE A SLICE.
  • fn: the comparer function.
  • returns: the difference of the two slices.

Example:

// Output: []string{"c"}
Differences([]string{"a", "b", "c"}, []string{"a", "b"}, arrutil.StringEqualsComparer

func ElemTypeEqualsComparer added in v0.5.3

func ElemTypeEqualsComparer[T any](a, b T) int

ElemTypeEqualsComparer Comparer for struct/value. It will compare the struct by their element type.

returns: 0 if same type, -1 if not.

func ExceptWhile added in v0.5.3

func ExceptWhile[T any](data []T, fn Predicate[T]) []T

ExceptWhile Produce the set of a slice except with a predicate function, Produce original slice when predicate function not match.

  • data: the slice. MUST BE A SLICE.
  • fn: the predicate function.
  • returns: the set of the slice.

Example:

// Output: []string{"a", "b"}
sl := ExceptWhile([]string{"a", "b", "c"}, func(s string) bool {
	return s == "c"
})

func Excepts added in v0.5.3

func Excepts[T any](first, second []T, fn Comparer[T]) []T

Excepts Produces the set difference of two slice according to a comparer function.

  • first: the first slice. MUST BE A SLICE.
  • second: the second slice. MUST BE A SLICE.
  • fn: the comparer function.
  • returns: the difference of the two slices.

Example:

// Output: []string{"c"}
Excepts([]string{"a", "b", "c"}, []string{"a", "b"}, arrutil.StringEqualsComparer)

func Filter added in v0.6.11

func Filter[T any](ls []T, filter ...comdef.MatchFunc[T]) []T

Filter given slice, default will filter zero value.

Usage:

// output: [a, b]
ss := arrutil.Filter([]string{"a", "", "b", ""})

func Find added in v0.5.3

func Find[T any](source []T, fn Predicate[T]) (v T, err error)

Find Produces the value of a slice according to a predicate function.

  • source: the slice. MUST BE A SLICE.
  • fn: the predicate function.
  • returns: the struct/value of the slice.

Example:

// Output: "c"
val := Find([]string{"a", "b", "c"}, func(s string) bool {
	return s == "c"
})

func FindOrDefault added in v0.5.3

func FindOrDefault[T any](source []T, fn Predicate[T], defaultValue T) T

FindOrDefault Produce the value f a slice to a predicate function, Produce default value when predicate function not found.

  • source: the slice. MUST BE A SLICE.
  • fn: the predicate function.
  • defaultValue: the default value.
  • returns: the value of the slice.

Example:

// Output: "d"
val := FindOrDefault([]string{"a", "b", "c"}, func(s string) bool {
	return s == "d"
}, "d")

func FirstOr added in v0.7.0

func FirstOr[T any](list []T, defVal ...T) T

FirstOr get first value of slice, if slice is empty, return the default value.

func FormatIndent added in v0.5.3

func FormatIndent(arr any, indent string) string

FormatIndent array data to string.

func GetRandomOne added in v0.3.8

func GetRandomOne[T any](arr []T) T

GetRandomOne get random element from an array/slice

func HasValue added in v0.3.13

func HasValue(arr, val any) bool

HasValue check array(strings, intXs, uintXs) should be contained the given value(int(X),string).

func In added in v0.6.2

func In[T comdef.ScalarType](value T, list []T) bool

In check the given value whether in the list

func InStrings added in v0.5.0

func InStrings[T ~string](elem T, ss []T) bool

InStrings check elem in the ss. alias of StringsHas()

func IndexOf added in v0.6.6

func IndexOf[T comdef.NumberOrString](val T, list []T) int

IndexOf value in given slice.

func Int64sHas added in v0.3.6

func Int64sHas(ints []int64, val int64) bool

Int64sHas check the []int64 contains the given value

func Intersects added in v0.5.3

func Intersects[T any](first, second []T, fn Comparer[T]) []T

Intersects Produces to intersect of two slice according to a comparer function.

  • first: the first slice. MUST BE A SLICE.
  • second: the second slice. MUST BE A SLICE.
  • fn: the comparer function.
  • returns: to intersect of the two slices.

Example:

// Output: []string{"a", "b"}
Intersects([]string{"a", "b", "c"}, []string{"a", "b"}, arrutil.ValueEqualsComparer)

func IntsHas added in v0.3.6

func IntsHas[T comdef.Integer](ints []T, val T) bool

IntsHas check the []comdef.Integer contains the given value

func IntsToString added in v0.6.11

func IntsToString[T comdef.Integer](ints []T) string

IntsToString convert []T to string

func IsParent added in v0.6.2

func IsParent[T comdef.ScalarType](values, list []T) bool

IsParent check given values is parent-list of samples.

func IsSubList added in v0.6.2

func IsSubList[T comdef.ScalarType](values, list []T) bool

IsSubList check given values is sub-list of sample list.

func JoinSlice added in v0.5.0

func JoinSlice(sep string, arr ...any) string

JoinSlice join []any slice to string.

func JoinStrings added in v0.4.2

func JoinStrings(sep string, ss ...string) string

JoinStrings alias of strings.Join

func JoinTyped added in v0.6.12

func JoinTyped[T any](sep string, arr ...T) string

JoinTyped join typed []T slice to string.

Usage:

JoinTyped(",", 1,2,3) // "1,2,3"
JoinTyped(",", "a","b","c") // "a,b,c"
JoinTyped[any](",", "a",1,"c") // "a,1,c"

func Map added in v0.6.0

func Map[T, V any](list []T, mapFn MapFn[T, V]) []V

Map a list to new list

eg: mapping [object0{},object1{},...] to flatten list [object0.someKey, object1.someKey, ...]

func Map1 added in v0.7.2

func Map1[T, R any](list []T, fn func(t T) R) []R

Map1 a list to new list, alias of Map func

func MustToInt64s added in v0.3.13

func MustToInt64s(arr any) []int64

MustToInt64s convert any(allow: array,slice) to []int64

func MustToStrings added in v0.3.13

func MustToStrings(arr any) []string

MustToStrings convert array or slice to []string

func NotContains added in v0.3.6

func NotContains(arr, val any) bool

NotContains check array(strings, ints, uints) should be not contains the given value.

func NotIn added in v0.6.2

func NotIn[T comdef.ScalarType](value T, list []T) bool

NotIn check the given value whether not in the list

func QuietStrings added in v0.6.2

func QuietStrings(arr []any) []string

QuietStrings safe convert []any to []string

func RandomOne added in v0.5.7

func RandomOne[T any](arr []T) T

RandomOne get random element from an array/slice

func ReflectEqualsComparer added in v0.6.12

func ReflectEqualsComparer[T any](a, b T) int

ReflectEqualsComparer Comparer for struct ptr. It will compare by reflect.Value

returns: 0 if equal, -1 if a != b

func Remove added in v0.6.11

func Remove[T comdef.Compared](ls []T, val T) []T

Remove give element from slice []T.

eg: []string{"site", "user", "info", "0"} -> []string{"site", "user", "info"}

func Reverse

func Reverse[T any](ls []T)

Reverse any T slice.

eg: []string{"site", "user", "info", "0"} -> []string{"0", "info", "user", "site"}

func SliceHas added in v0.6.11

func SliceHas[T comdef.ScalarType](slice []T, val T) bool

SliceHas check the slice contains the given value

func SliceToInt64s added in v0.3.13

func SliceToInt64s(arr []any) []int64

SliceToInt64s convert []any to []int64

func SliceToString added in v0.4.5

func SliceToString(arr ...any) string

SliceToString convert []any to string

func SliceToStrings added in v0.3.13

func SliceToStrings(arr []any) []string

SliceToStrings safe convert []any to []string

func StringEqualsComparer added in v0.5.3

func StringEqualsComparer(a, b string) int

StringEqualsComparer Comparer for string. It will compare the string by their value.

returns: 0 if equal, -1 if a != b

func StringsAsInts added in v0.6.2

func StringsAsInts(ss []string) []int

StringsAsInts convert and ignore error

func StringsContains added in v0.6.13

func StringsContains(ss []string, s string) bool

StringsContains check string slice contains string

func StringsFilter added in v0.5.7

func StringsFilter(ss []string, filter ...comdef.StringMatchFunc) []string

StringsFilter given strings, default will filter emtpy string.

Usage:

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

func StringsHas added in v0.3.6

func StringsHas[T ~string](ss []T, val T) bool

StringsHas check the []string contains the given element

func StringsJoin added in v0.4.2

func StringsJoin(sep string, ss ...string) string

StringsJoin alias of strings.Join

func StringsMap added in v0.5.11

func StringsMap(ss []string, mapFn func(s string) string) []string

StringsMap handle each string item, map to new strings

func StringsRemove added in v0.1.4

func StringsRemove(ss []string, s string) []string

StringsRemove value form a string slice

func StringsToAnys added in v0.6.13

func StringsToAnys(ss []string) []any

StringsToAnys convert []string to []any

func StringsToInts added in v0.2.2

func StringsToInts(ss []string) (ints []int, err error)

StringsToInts string slice to int slice

func StringsToSlice added in v0.4.5

func StringsToSlice(ss []string) []any

StringsToSlice convert []string to []any. alias of StringsToAnys()

func StringsTryInts added in v0.6.2

func StringsTryInts(ss []string) (ints []int, err error)

StringsTryInts string slice to int slice

func StringsUnique added in v0.6.13

func StringsUnique(ss []string) []string

StringsUnique unique string slice

func TakeWhile added in v0.5.3

func TakeWhile[T any](data []T, fn Predicate[T]) []T

TakeWhile Produce the set of a slice according to a predicate function, Produce empty slice when predicate function not matched.

  • data: the slice. MUST BE A SLICE.
  • fn: the predicate function.
  • returns: the set of the slice.

Example:

// Output: []string{"a", "b"}
sl := TakeWhile([]string{"a", "b", "c"}, func(s string) bool {
	return s != "c"
})

func ToInt64s added in v0.3.13

func ToInt64s(arr any) (ret []int64, err error)

ToInt64s convert any(allow: array,slice) to []int64

func ToMap added in v0.7.2

func ToMap[T any, K comdef.ScalarType, V any](list []T, mapFn func(T) (K, V)) map[K]V

ToMap convert a list to new map.

Example:

 type User struct {
		Name string
		Age  int
	}
	users := []User{{"Tom", 18}, {"Jack", 20}}
	mp := arrutil.ToMap(users, func(u User) (string, int) {
		return u.Name, u.Age
	})
 // mp = map[string]int{"Tom":18, "Jack":20}

func ToString added in v0.4.5

func ToString[T any](arr []T) string

ToString simple and quickly convert []T to string

func ToStrings added in v0.3.13

func ToStrings(arr any) (ret []string, err error)

ToStrings convert any(allow: array,slice) to []string

func TrimStrings added in v0.2.2

func TrimStrings(ss []string, cutSet ...string) []string

TrimStrings trim string slice item.

Usage:

// output: [a, b, c]
ss := arrutil.TrimStrings([]string{",a", "b.", ",.c,"}, ",.")

func TwowaySearch added in v0.5.3

func TwowaySearch[T any](data []T, item T, fn Comparer[T]) (int, error)

TwowaySearch find specialized element in a slice forward and backward in the same time, should be more quickly.

  • data: the slice to search in. MUST BE A SLICE.
  • item: the element to search.
  • fn: the comparer function.
  • return: the index of the element, or -1 if not found.

func Union added in v0.5.3

func Union[T any](first, second []T, fn Comparer[T]) []T

Union Produces the set union of two slice according to a comparer function

  • first: the first slice. MUST BE A SLICE.
  • second: the second slice. MUST BE A SLICE.
  • fn: the comparer function.
  • returns: the union of the two slices.

Example:

// Output: []string{"a", "b", "c"}
sl := Union([]string{"a", "b", "c"}, []string{"a", "b"}, arrutil.ValueEqualsComparer)

func Unique added in v0.5.13

func Unique[T comdef.NumberOrString](list []T) []T

Unique value in the given slice data.

func ValueEqualsComparer added in v0.6.12

func ValueEqualsComparer[T comdef.Compared](a, b T) int

ValueEqualsComparer Comparer for comdef.Compared type. It will compare by their value.

returns: 0 if equal, -1 if a != b

Types

type ArrFormatter added in v0.5.3

type ArrFormatter struct {
	comdef.BaseFormatter
	// Prefix string for each element
	Prefix string
	// Indent string for format each element
	Indent string
	// ClosePrefix on before end char: ]
	ClosePrefix string
}

ArrFormatter struct

func NewFormatter added in v0.5.3

func NewFormatter(arr any) *ArrFormatter

NewFormatter instance

func (*ArrFormatter) Format added in v0.5.3

func (f *ArrFormatter) Format() string

Format to string

func (*ArrFormatter) FormatTo added in v0.5.3

func (f *ArrFormatter) FormatTo(w io.Writer)

FormatTo to custom buffer

func (*ArrFormatter) String added in v0.5.3

func (f *ArrFormatter) String() string

Format to string

func (*ArrFormatter) WithFn added in v0.5.3

func (f *ArrFormatter) WithFn(fn func(f *ArrFormatter)) *ArrFormatter

WithFn for config self

func (*ArrFormatter) WithIndent added in v0.5.3

func (f *ArrFormatter) WithIndent(indent string) *ArrFormatter

WithIndent string

type Comparer added in v0.5.3

type Comparer[T any] func(a, b T) int

Comparer Function to compare two elements.

type Ints added in v0.3.9

type Ints[T comdef.Integer] []T

Ints type

func (Ints[T]) First added in v0.6.11

func (is Ints[T]) First(defVal ...T) T

First element value.

func (Ints[T]) Has added in v0.3.9

func (is Ints[T]) Has(i T) bool

Has given element

func (Ints[T]) Last added in v0.6.11

func (is Ints[T]) Last(defVal ...T) T

Last element value.

func (Ints[T]) Len added in v0.6.11

func (is Ints[T]) Len() int

Len get length

func (Ints[T]) Less added in v0.6.11

func (is Ints[T]) Less(i, j int) bool

Less compare two elements

func (Ints[T]) Sort added in v0.6.11

func (is Ints[T]) Sort()

Sort the int slice

func (Ints[T]) String added in v0.3.9

func (is Ints[T]) String() string

String to string

func (Ints[T]) Swap added in v0.6.11

func (is Ints[T]) Swap(i, j int)

Swap elements by indexes

type MapFn added in v0.6.11

type MapFn[T any, V any] func(input T) (target V, find bool)

MapFn map handle function type.

type Predicate added in v0.5.3

type Predicate[T any] func(v T) bool

Predicate Function to predicate a struct/value satisfies a condition.

type SortedList added in v0.6.11

type SortedList[T comdef.Compared] []T

SortedList definition for compared type

func (SortedList[T]) Contains added in v0.6.11

func (ls SortedList[T]) Contains(el T) bool

Contains given element

func (SortedList[T]) Filter added in v0.6.11

func (ls SortedList[T]) Filter(filter ...comdef.MatchFunc[T]) SortedList[T]

Filter the slice, default will filter zero value.

func (SortedList[T]) First added in v0.6.11

func (ls SortedList[T]) First(defVal ...T) T

First element value.

func (SortedList[T]) Has added in v0.6.11

func (ls SortedList[T]) Has(el T) bool

Has given element

func (SortedList[T]) IsEmpty added in v0.6.11

func (ls SortedList[T]) IsEmpty() bool

IsEmpty check

func (SortedList[T]) Last added in v0.6.11

func (ls SortedList[T]) Last(defVal ...T) T

Last element value.

func (SortedList[T]) Len added in v0.6.11

func (ls SortedList[T]) Len() int

Len get length

func (SortedList[T]) Less added in v0.6.11

func (ls SortedList[T]) Less(i, j int) bool

Less compare two elements

func (SortedList[T]) Remove added in v0.6.11

func (ls SortedList[T]) Remove(el T) SortedList[T]

Remove given element

func (SortedList[T]) Sort added in v0.6.11

func (ls SortedList[T]) Sort()

Sort the slice

func (SortedList[T]) String added in v0.6.11

func (ls SortedList[T]) String() string

String to string

func (SortedList[T]) Swap added in v0.6.11

func (ls SortedList[T]) Swap(i, j int)

Swap elements by indexes

type Strings added in v0.3.9

type Strings []string

Strings type

func (Strings) Contains added in v0.6.5

func (ss Strings) Contains(sub string) bool

Contains given element

func (Strings) First added in v0.6.5

func (ss Strings) First(defVal ...string) string

First element value.

func (Strings) Has added in v0.3.9

func (ss Strings) Has(sub string) bool

Has given element

func (Strings) Join added in v0.5.11

func (ss Strings) Join(sep string) string

Join to string

func (Strings) Last added in v0.6.11

func (ss Strings) Last(defVal ...string) string

Last element value.

func (Strings) Sort added in v0.6.11

func (ss Strings) Sort()

Sort the string slice

func (Strings) String added in v0.3.9

func (ss Strings) String() string

String to string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL