arrutil

package
v0.6.1 Latest Latest
Warning

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

Go to latest
Published: Dec 12, 2022 License: MIT Imports: 8 Imported by: 60

README

Array/Slice Utils

Install

go get github.com/gookit/goutil/arrutil

Go docs

Functions API

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

View Source
const ErrElementNotFound = "element not found"

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

Variables

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

ErrInvalidType error

Functions

func AnyToString added in v0.5.2

func AnyToString(arr any) string

AnyToString simple and quickly convert any array, slice to string

func CloneSlice added in v0.5.3

func CloneSlice(data any) any

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 Contains added in v0.3.6

func Contains(arr, val any) bool

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

func ExceptWhile added in v0.5.3

func ExceptWhile(data any, fn Predicate) any

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.

func Excepts added in v0.5.3

func Excepts(first, second any, fn Comparer) any

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.

func Find added in v0.5.3

func Find(source any, fn Predicate) (any, error)

Find Produces the struct/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.

func FindOrDefault added in v0.5.3

func FindOrDefault(source any, fn Predicate, defaultValue any) any

FindOrDefault Produce the struct/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 struct/value of the slice.

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 InStrings added in v0.5.0

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

InStrings alias of StringsHas()

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(first any, second any, fn Comparer) any

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.

func IntsHas added in v0.3.6

func IntsHas(ints []int, val int) bool

IntsHas check the []int contains the given value

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 MakeEmptySlice added in v0.5.3

func MakeEmptySlice(itemType reflect.Type) any

MakeEmptySlice Create a new slice with the elements of the source that satisfy the predicate.

itemType: the type of the elements in the source. returns: the new slice.

func Map added in v0.6.0

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

Map an object list [object0{},object1{},...] to flatten list [object0.someKey, object1.someKey, ...]

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 RandomOne added in v0.5.7

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

RandomOne get random element from an array/slice

func Reverse

func Reverse(ss []string)

Reverse string slice [site user info 0] -> [0 info user site]

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 convert []any to []string

func StringsFilter added in v0.5.7

func StringsFilter(ss []string, filter ...func(s string) bool) []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(ss []string, val string) 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 a value form a string slice

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

func TakeWhile added in v0.5.3

func TakeWhile(data any, fn Predicate) any

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.

func ToInt64s added in v0.3.13

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

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

func ToString added in v0.4.5

func ToString(arr []any) string

ToString simple and quickly convert []any 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(data any, item any, fn Comparer) (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(first, second any, fn Comparer) any

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.

func Unique added in v0.5.13

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

Unique value in the given slice data.

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 string for last "]"
	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 func(a, b any) int

Comparer Function to compare two elements.

var (
	// StringEqualsComparer Comparer for string. It will compare the string by their value.
	// returns: 0 if equal, -1 if a != b
	StringEqualsComparer Comparer = func(a, b any) int {
		typeOfA := reflect.TypeOf(a)
		if typeOfA.Kind() == reflect.Ptr {
			typeOfA = typeOfA.Elem()
		}

		typeOfB := reflect.TypeOf(b)
		if typeOfB.Kind() == reflect.Ptr {
			typeOfB = typeOfB.Elem()
		}

		if typeOfA != typeOfB {
			return -1
		}

		strA := ""
		strB := ""

		if val, ok := a.(string); ok {
			strA = val
		} else if val, ok := a.(*string); ok {
			strA = *val
		} else {
			return -1
		}

		if val, ok := b.(string); ok {
			strB = val
		} else if val, ok := b.(*string); ok {
			strB = *val
		} else {
			return -1
		}

		if strA == strB {
			return 0
		}
		return -1
	}

	// ReferenceEqualsComparer Comparer for strcut ptr. It will compare the struct by their ptr addr.
	// returns: 0 if equal, -1 if a != b
	ReferenceEqualsComparer Comparer = func(a, b any) int {
		if a == b {
			return 0
		}
		return -1
	}

	// ElemTypeEqualsComparer Comparer for struct/value. It will compare the struct by their element type (reflect.Type.Elem()).
	// returns: 0 if same type, -1 if not.
	ElemTypeEqualsComparer Comparer = func(a, b any) int {
		at := reflect.TypeOf(a)
		bt := reflect.TypeOf(b)
		if at.Kind() == reflect.Ptr {
			at = at.Elem()
		}

		if bt.Kind() == reflect.Ptr {
			bt = bt.Elem()
		}

		if at == bt {
			return 0
		}
		return -1
	}
)

type Ints added in v0.3.9

type Ints []int

Ints type

func (Ints) Has added in v0.3.9

func (is Ints) Has(i int) bool

Has given element

func (Ints) String added in v0.3.9

func (is Ints) String() string

String to string

type Predicate added in v0.5.3

type Predicate func(a any) bool

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

type Strings added in v0.3.9

type Strings []string

Strings type

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) 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