arrutil

package
v0.0.3 Latest Latest
Warning

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

Go to latest
Published: Feb 6, 2023 License: Apache-2.0 Imports: 9 Imported by: 0

README

Array/Slice Utils

Install

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

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(data any) any

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

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

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

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

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

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(elem string, ss []string) bool

InStrings alias of StringsHas()

func Int64sHas

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

Int64sHas check the []int64 contains the given value

func Intersects

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

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

IntsHas check the []int contains the given value

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 MakeEmptySlice

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

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

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

func RandomOne

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

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

func StringsAsInts

func StringsAsInts(ss []string) []int

StringsAsInts convert and ignore error

func StringsFilter

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

func StringsHas(ss []string, val string) 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 a value form a string slice

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

func StringsTryInts

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

StringsTryInts string slice to int slice

func TakeWhile

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

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

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

func ToString

func ToString(arr []any) string

ToString simple and quickly convert []any 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(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

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

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

Unique value in the given slice data.

Types

type ArrFormatter

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

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

type Ints []int

Ints type

func (Ints) Has

func (is Ints) Has(i int) bool

Has given element

func (Ints) String

func (is Ints) String() string

String to string

type Predicate

type Predicate func(a any) bool

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

type Strings

type Strings []string

Strings type

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