arrutil

package
v0.0.0-...-f5003fd Latest Latest
Warning

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

Go to latest
Published: Jan 20, 2025 License: MIT Imports: 10 Imported by: 0

README

Array/Slice Utils

Install

go get github.com/Joaolfc0/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

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

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

func AnyToString

func AnyToString(arr any) string

AnyToString simple and quickly convert any array, slice to string

func AnyToStrings

func AnyToStrings(arr any) []string

AnyToStrings convert array or slice to []string

func CloneSlice

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

CloneSlice Clone a slice.

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

func Column

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

Column alias of Map func

func CombineToMap

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

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

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

func Contains

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

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

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

func ConvType

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

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

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

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

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

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

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

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

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 FormatIndent

func FormatIndent(arr any, indent string) string

FormatIndent array data to string.

func GetRandomOne

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

GetRandomOne get random element from an array/slice

func HasValue

func HasValue(arr, val any) bool

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

func In

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

In check the given value whether in the list

func InStrings

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

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

func IndexOf

func IndexOf[T ~string | comdef.XintOrFloat](val T, list []T) int

IndexOf value in given slice.

func Int64sHas

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

Int64sHas check the []int64 contains the given value

func Intersects

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

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

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

func IntsToString

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

IntsToString convert []T to string

func IsParent

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

IsParent check given values is parent-list of samples.

func IsSubList

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

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

func JoinSlice

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

JoinSlice join []any slice to string.

func JoinStrings

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

JoinStrings alias of strings.Join

func JoinTyped

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

func Map[T any, 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 MustToInt64s

func MustToInt64s(arr any) []int64

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

func MustToStrings

func MustToStrings(arr any) []string

MustToStrings convert array or slice to []string

func NotContains

func NotContains(arr, val any) bool

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

func NotIn

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

NotIn check the given value whether not in the list

func QuietStrings

func QuietStrings(arr []any) []string

QuietStrings safe convert []any to []string

func RandomOne

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

RandomOne get random element from an array/slice

func ReflectEqualsComparer

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

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

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

SliceHas check the slice contains the given value

func SliceToInt64s

func SliceToInt64s(arr []any) []int64

SliceToInt64s convert []any to []int64

func SliceToString

func SliceToString(arr ...any) string

SliceToString convert []any to string

func SliceToStrings

func SliceToStrings(arr []any) []string

SliceToStrings safe convert []any to []string

func StringEqualsComparer

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

func StringsAsInts(ss []string) []int

StringsAsInts convert and ignore error

func StringsContains

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

StringsContains check string slice contains string

func StringsFilter

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

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

StringsHas check the []string contains the given element

func StringsJoin

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

StringsJoin alias of strings.Join

func StringsMap

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

StringsMap handle each string item, map to new strings

func StringsRemove

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

StringsRemove value form a string slice

func StringsToAnys

func StringsToAnys(ss []string) []any

StringsToAnys convert []string to []any

func StringsToInts

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

StringsToInts string slice to int slice

func StringsToSlice

func StringsToSlice(ss []string) []any

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

func StringsTryInts

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

StringsTryInts string slice to int slice

func StringsUnique

func StringsUnique(ss []string) []string

StringsUnique unique string slice

func TakeWhile

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

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

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

func ToString

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

ToString simple and quickly convert []T to string

func ToStrings

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

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

func TrimStrings

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

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

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

func Unique[T ~string | comdef.XintOrFloat](list []T) []T

Unique value in the given slice data.

func ValueEqualsComparer

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

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

func NewFormatter(arr any) *ArrFormatter

NewFormatter instance

func (*ArrFormatter) Format

func (f *ArrFormatter) Format() string

Format to string

func (*ArrFormatter) FormatTo

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

FormatTo to custom buffer

func (*ArrFormatter) String

func (f *ArrFormatter) String() string

Format to string

func (*ArrFormatter) WithFn

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

WithFn for config self

func (*ArrFormatter) WithIndent

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

WithIndent string

type Comparer

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

Comparer Function to compare two elements.

type Ints

type Ints[T comdef.Integer] []T

Ints type

func (Ints[T]) First

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

First element value.

func (Ints[T]) Has

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

Has given element

func (Ints[T]) Last

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

Last element value.

func (Ints[T]) Len

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

Len get length

func (Ints[T]) Less

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

Less compare two elements

func (Ints[T]) Sort

func (is Ints[T]) Sort()

Sort the int slice

func (Ints[T]) String

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

String to string

func (Ints[T]) Swap

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

Swap elements by indexes

type MapFn

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

MapFn map handle function type.

type Predicate

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

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

type SortedList

type SortedList[T comdef.Compared] []T

SortedList definition for compared type

func (SortedList[T]) Contains

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

Contains given element

func (SortedList[T]) Filter

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

Filter the slice, default will filter zero value.

func (SortedList[T]) First

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

First element value.

func (SortedList[T]) Has

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

Has given element

func (SortedList[T]) IsEmpty

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

IsEmpty check

func (SortedList[T]) Last

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

Last element value.

func (SortedList[T]) Len

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

Len get length

func (SortedList[T]) Less

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

Less compare two elements

func (SortedList[T]) Remove

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

Remove given element

func (SortedList[T]) Sort

func (ls SortedList[T]) Sort()

Sort the slice

func (SortedList[T]) String

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

String to string

func (SortedList[T]) Swap

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

Swap elements by indexes

type Strings

type Strings []string

Strings type

func (Strings) Contains

func (ss Strings) Contains(sub string) bool

Contains given element

func (Strings) First

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

First element value.

func (Strings) Has

func (ss Strings) Has(sub string) bool

Has given element

func (Strings) Join

func (ss Strings) Join(sep string) string

Join to string

func (Strings) Last

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

Last element value.

func (Strings) Sort

func (ss Strings) Sort()

Sort the string slice

func (Strings) String

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