ds

package
v1.0.0-pre17 Latest Latest
Warning

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

Go to latest
Published: Mar 8, 2023 License: MIT Imports: 11 Imported by: 5

Documentation

Overview

Package ds Dlist copy from https://github.com/chen3feng/stl4go/blob/master/dlist.go

Package ds queue copy from https://github.com/eapache/queue/blob/master/queue.go

Package ds BuiltinSet copy from https://github.com/chen3feng/stl4go/blob/master/builtin_set.go

Package ds stack copy from https://github.com/chen3feng/stl4go/blob/master/stack.go

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BinarySearch

func BinarySearch[T ttypes.Ordered](data []T, value T) int

BinarySearch 二分搜索

func MapKeyToSlice added in v1.0.1

func MapKeyToSlice[T comparable, V any](a map[T]V) []T

func MapValueToSlice added in v1.0.1

func MapValueToSlice[T comparable, V any](a map[T]V) []V

func MapZipSliceToMap added in v1.0.1

func MapZipSliceToMap[T comparable, V any](a []T, b []V) (map[T]V, error)

func Max

func Max[T ttypes.Ordered](data ...T) T

Max 求最大值

func MaxN added in v1.0.1

func MaxN[T ttypes.Ordered](data []T, n int) []T

func MaxNWithOrder added in v1.0.1

func MaxNWithOrder[T ttypes.Ordered](data []T, n int) []T

func Min

func Min[T ttypes.Ordered](data ...T) T

Min 求最小值

func MinN added in v1.0.1

func MinN[T ttypes.Ordered](data []T, n int) []T

func MinNWithOrder added in v1.0.1

func MinNWithOrder[T ttypes.Ordered](data []T, n int) []T

func SetToSlice

func SetToSlice[K comparable](u BuiltinSet[K]) []K

SetToSlice convert from set to slice

func SliceAbsoluteEqual

func SliceAbsoluteEqual[T comparable](a []T, b []T) bool

SliceAbsoluteEqual 判断两个slice是否一样,严格按照顺序比较

func SliceConvertToInt added in v1.0.1

func SliceConvertToInt(data interface{}) ([]int, error)

func SliceConvertToInt64 added in v1.0.1

func SliceConvertToInt64(data interface{}) ([]int64, error)

func SliceConvertToString added in v1.0.1

func SliceConvertToString(data interface{}) ([]string, error)

func SliceCopy

func SliceCopy[T any](data []T, ns ...int) []T

SliceCopy 复制切片

func SliceExclude

func SliceExclude[T comparable](a []T, b T) bool

SliceExclude 判断元素是否不在slice中

func SliceFilter

func SliceFilter[T any](a []T, filter func(i int) bool) []T

SliceFilter 过滤slice

func SliceInclude

func SliceInclude[T comparable](a []T, b T) bool

SliceInclude 判断元素是否在slice中

func SliceIndex added in v1.0.1

func SliceIndex[T comparable](a []T, b T) int

SliceIndex 获取元素在切片中的下标,如果不存在返回-1

func SliceLogicalEqual

func SliceLogicalEqual[T comparable](a []T, b []T) bool

SliceLogicalEqual 判断两个Slice是否逻辑一样,和顺序无关

func SliceMap

func SliceMap[T any](a []T, handler func(i int))

SliceMap 对slice中的元素执行操作

func SliceMax

func SliceMax[T ttypes.Ordered](data []T) T

SliceMax 求数组的最大值

func SliceMin

func SliceMin[T ttypes.Ordered](data []T) T

SliceMin 求数组的最小值

func SliceRemove added in v1.0.1

func SliceRemove[T comparable](data *[]T, b T)

SliceRemove 原地删除元素

func SliceReplace added in v1.0.1

func SliceReplace[T comparable](data []T, a T, b T)

SliceReplace 原地替换元素

func SliceReverse

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

SliceReverse 转置切片

func SliceReverseCopy added in v1.0.1

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

SliceReverseCopy 转置切片并复制

func SliceShuffle added in v1.0.1

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

SliceShuffle shuffle 切片

func SliceUnique

func SliceUnique[T comparable](data []T) []T

SliceUnique 去重切片

Types

type BuiltinSet

type BuiltinSet[K comparable] map[K]struct{}

BuiltinSet is an associative container that contains an unordered set of unique objects of type K.

func NewSet

func NewSet[K comparable]() BuiltinSet[K]

func SetFromSlice

func SetFromSlice[K comparable](ks []K) BuiltinSet[K]

SetFromSlice create a new BuiltinSet object with the initial content from slice.

func SetOf

func SetOf[K comparable](ks ...K) BuiltinSet[K]

SetOf creates a new BuiltinSet object with the initial content from ks.

func (BuiltinSet[K]) Clear

func (s BuiltinSet[K]) Clear()

Clear implements the Container interface.

func (BuiltinSet[K]) Delete

func (s BuiltinSet[K]) Delete(k K)

Delete deletes an element from the set. It returns nothing, so it's faster than Remove.

func (BuiltinSet[K]) Difference

func (s BuiltinSet[K]) Difference(other BuiltinSet[K]) BuiltinSet[K]

Difference returns a new set with elements in the set that are not in other.

func (BuiltinSet[K]) ForEach

func (s BuiltinSet[K]) ForEach(cb func(k K))

ForEach implements the Set interface.

func (BuiltinSet[K]) ForEachIf

func (s BuiltinSet[K]) ForEachIf(cb func(k K) bool)

ForEachIf implements the Container interface.

func (BuiltinSet[K]) Has

func (s BuiltinSet[K]) Has(k K) bool

Has implements the Set interface.

func (BuiltinSet[K]) Insert

func (s BuiltinSet[K]) Insert(k K) bool

Insert implements the Set interface.

func (BuiltinSet[K]) InsertN

func (s BuiltinSet[K]) InsertN(ks ...K) int

InsertN implements the Set interface.

func (BuiltinSet[K]) Intersection

func (s BuiltinSet[K]) Intersection(other BuiltinSet[K]) BuiltinSet[K]

Intersection returns a new set with elements common to the set and other.

func (BuiltinSet[K]) IsDisjointOf

func (s BuiltinSet[K]) IsDisjointOf(other BuiltinSet[K]) bool

IsDisjointOf return True if the set has no elements in common with other. Sets are disjoint if and only if their intersection is the empty set.

func (BuiltinSet[K]) IsEmpty

func (s BuiltinSet[K]) IsEmpty() bool

IsEmpty implements the Container interface.

func (BuiltinSet[K]) IsSubsetOf

func (s BuiltinSet[K]) IsSubsetOf(other BuiltinSet[K]) bool

IsSubsetOf tests whether every element in the set is in other.

func (BuiltinSet[K]) IsSupersetOf

func (s BuiltinSet[K]) IsSupersetOf(other BuiltinSet[K]) bool

IsSupersetOf tests whether every element in other is in the set.

func (BuiltinSet[K]) Keys

func (s BuiltinSet[K]) Keys() []K

Keys return a copy of all keys as a slice.

func (BuiltinSet[K]) Len

func (s BuiltinSet[K]) Len() int

Len implements the Container interface.

func (BuiltinSet[K]) Remove

func (s BuiltinSet[K]) Remove(k K) bool

Remove implements the Set interface.

func (BuiltinSet[K]) RemoveN

func (s BuiltinSet[K]) RemoveN(ks ...K) int

RemoveN implements the Set interface.

func (BuiltinSet[K]) String

func (s BuiltinSet[K]) String() string

String implements the fmt.Stringer interface.

func (BuiltinSet[K]) Union

func (s BuiltinSet[K]) Union(other BuiltinSet[K]) BuiltinSet[K]

Union returns a new set with elements from the set and other.

func (BuiltinSet[K]) Update

func (s BuiltinSet[K]) Update(other BuiltinSet[K])

Update adds all elements from other to set. set |= other.

type CounterMap

type CounterMap[K comparable] map[K]int

func NewCounterMap

func NewCounterMap[K comparable](data []K) CounterMap[K]

func (CounterMap[K]) Equal

func (c CounterMap[K]) Equal(other CounterMap[K]) bool

type GroupMap

type GroupMap[K comparable, V any] map[K][]V

func NewGroupMap

func NewGroupMap[K comparable, V any](data []V, getKeyHandler func(V) K) GroupMap[K, V]

type Iterator added in v1.0.1

type Iterator[T any] interface {
	IsNotEnd() bool // Whether it is point to the end of the range.
	MoveToNext()    // Let it point to the next element.
	Value() T       // Return the value of current element.
}

Iterator is the interface for container's iterator.

type List added in v1.0.1

type List[T any] struct {
	// contains filtered or unexported fields
}

List is a doubly linked list.

func ListOf added in v1.0.1

func ListOf[T any](vs ...T) List[T]

ListOf make a new List from a serial of values.

func (*List[T]) Back added in v1.0.1

func (l *List[T]) Back() T

Back returns the last element in the container.

func (*List[T]) Clear added in v1.0.1

func (l *List[T]) Clear()

Clear cleanup the list.

func (*List[T]) ForEach added in v1.0.1

func (l *List[T]) ForEach(cb func(val T))

ForEach iterate the list, apply each element to the cb callback function.

func (*List[T]) ForEachIf added in v1.0.1

func (l *List[T]) ForEachIf(cb func(val T) bool)

ForEachIf iterate the list, apply each element to the cb callback function, stop if cb returns false.

func (*List[T]) ForEachMutable added in v1.0.1

func (l *List[T]) ForEachMutable(cb func(val *T))

ForEachMutable iterate the list, apply pointer of each element to the cb callback function.

func (*List[T]) ForEachMutableIf added in v1.0.1

func (l *List[T]) ForEachMutableIf(cb func(val *T) bool)

ForEachMutableIf iterate the list, apply pointer of each element to the cb callback function, stop if cb returns false.

func (*List[T]) Front added in v1.0.1

func (l *List[T]) Front() T

Front returns the first element in the container.

func (*List[T]) IsEmpty added in v1.0.1

func (l *List[T]) IsEmpty() bool

IsEmpty return whether the list is empty.

func (*List[T]) Iterate added in v1.0.1

func (l *List[T]) Iterate() MutableIterator[T]

Iterate returns an iterator to the first element in the list.

func (*List[T]) Len added in v1.0.1

func (l *List[T]) Len() int

Len return the length of the list.

func (*List[T]) PopBack added in v1.0.1

func (l *List[T]) PopBack() T

PopBack popups a element from the back of the list.

func (*List[T]) PopFront added in v1.0.1

func (l *List[T]) PopFront() T

PopFront popups a element from the front of the list.

func (*List[T]) PushBack added in v1.0.1

func (l *List[T]) PushBack(val T)

PushBack pushes an element at the back of the list.

func (*List[T]) PushFront added in v1.0.1

func (l *List[T]) PushFront(val T)

PushFront pushes an element at the front of the list.

func (*List[T]) TryPopBack added in v1.0.1

func (l *List[T]) TryPopBack() (T, bool)

TryPopBack tries to popup a element from the back of the list.

func (*List[T]) TryPopFront added in v1.0.1

func (l *List[T]) TryPopFront() (T, bool)

TryPopFront tries to popup a element from the front of the list.

type MapCompareResult added in v1.0.1

type MapCompareResult int
const (
	LeftKeyMiss MapCompareResult = iota + 1
	RightKeyMiss
	AllKeyMiss
	NotEqual
	Equal
	LeftLargeThanRight
	LeftLessThanRight
)

func MapComplexCompareWithKey added in v1.0.1

func MapComplexCompareWithKey[T comparable, V any](a map[T]V, b map[T]V, key T) MapCompareResult

MapComplexCompareWithKey 复杂值的key比较

func MapComplexFullCompare added in v1.0.1

func MapComplexFullCompare[T comparable, V any](a map[T]V, b map[T]V) MapCompareResult

MapComplexFullCompare 复杂值的全部比较

func MapNativeCompareWithKey added in v1.0.1

func MapNativeCompareWithKey[T comparable, V ttypes.Ordered](a map[T]V, b map[T]V, key T) MapCompareResult

MapNativeCompareWithKey 简单值的key比较

func MapNativeFullCompare added in v1.0.1

func MapNativeFullCompare[T comparable, V ttypes.Ordered](a map[T]V, b map[T]V) MapCompareResult

MapNativeFullCompare 简单值的全部比较

type MapLocker

type MapLocker[K comparable, V any] struct {
	// contains filtered or unexported fields
}

func NewMapLocker

func NewMapLocker[K comparable, V any]() *MapLocker[K, V]

func (*MapLocker[K, V]) Contain

func (m *MapLocker[K, V]) Contain(key K) bool

func (*MapLocker[K, V]) Foreach

func (m *MapLocker[K, V]) Foreach(handler func(key K, value V))

func (*MapLocker[K, V]) Get

func (m *MapLocker[K, V]) Get(key K) (V, bool)

func (*MapLocker[K, V]) Set

func (m *MapLocker[K, V]) Set(key K, value V)

type MapRWLocker

type MapRWLocker[K comparable, V any] struct {
	// contains filtered or unexported fields
}

func NewMapRWLocker

func NewMapRWLocker[K comparable, V any]() *MapRWLocker[K, V]

func (*MapRWLocker[K, V]) Contain

func (m *MapRWLocker[K, V]) Contain(key K) bool

func (*MapRWLocker[K, V]) Foreach

func (m *MapRWLocker[K, V]) Foreach(handler func(key K, value V))

func (*MapRWLocker[K, V]) Get

func (m *MapRWLocker[K, V]) Get(key K) (V, bool)

func (*MapRWLocker[K, V]) Set

func (m *MapRWLocker[K, V]) Set(key K, value V)

type MutableIterator added in v1.0.1

type MutableIterator[T any] interface {
	Iterator[T]
	Pointer() *T // Return the pointer to the value of current element.
}

MutableIterator is the interface for container's mutable iterator.

type Queue added in v1.0.1

type Queue[T any] struct {
	// contains filtered or unexported fields
}

Queue represents a single instance of the queue data structure.

func NewRing added in v1.0.1

func NewRing[T any]() *Queue[T]

NewRing constructs and returns a new Queue.

func (*Queue[T]) Add added in v1.0.1

func (q *Queue[T]) Add(elem T)

Add puts an element on the end of the queue.

func (*Queue[T]) Get added in v1.0.1

func (q *Queue[T]) Get(i int) T

Get returns the element at index i in the queue. If the index is invalid, the call will panic. This method accepts both positive and negative index values. Index 0 refers to the first element, and index -1 refers to the last.

func (*Queue[T]) Length added in v1.0.1

func (q *Queue[T]) Length() int

Length returns the number of elements currently stored in the queue.

func (*Queue[T]) Peek added in v1.0.1

func (q *Queue[T]) Peek() T

Peek returns the element at the head of the queue. This call panics if the queue is empty.

func (*Queue[T]) Remove added in v1.0.1

func (q *Queue[T]) Remove() T

Remove removes and returns the element from the front of the queue. If the queue is empty, the call will panic.

type SortedMap

type SortedMap[K ttypes.Ordered, V any] struct {
	ReverseOpt bool
	Tuples     []ttypes.Tuple[K, V]
	RawMap     map[K]V
}

SortedMap 有序Map,底层维护了有序切片 如果需要对map进行修改需要执行Rebuild来维护有序行,否则会导致不一致

func NewSortedMap

func NewSortedMap[K ttypes.Ordered, V any](data map[K]V, reverseOpts ...bool) SortedMap[K, V]

func (*SortedMap[K, V]) Rebuild

func (s *SortedMap[K, V]) Rebuild()

Rebuild 重新构建有序Map,一般用于map修改后再次维护tuples的有序行

type Stack added in v1.0.1

type Stack[T any] struct {
	// contains filtered or unexported fields
}

Stack s is a container adaptor that provides the functionality of a stack, a LIFO (last-in, first-out) data structure.

func NewStack added in v1.0.1

func NewStack[T any]() *Stack[T]

NewStack creates a new Stack object.

func NewStackCap added in v1.0.1

func NewStackCap[T any](capicity int) *Stack[T]

NewStackCap creates a new Stack object with the specified capicity.

func (Stack[T]) Cap added in v1.0.1

func (s Stack[T]) Cap() int

Cap returns the capacity of the stack.

func (*Stack[T]) Clear added in v1.0.1

func (s *Stack[T]) Clear()

Clear implements the Container interface.

func (Stack[T]) IsEmpty added in v1.0.1

func (s Stack[T]) IsEmpty() bool

IsEmpty implements the Container interface.

func (Stack[T]) Len added in v1.0.1

func (s Stack[T]) Len() int

Len implements the Container interface.

func (*Stack[T]) Pop added in v1.0.1

func (s *Stack[T]) Pop() T

Pop popups an element from the top of the stack. It must be called when IsEmpty() returned false, otherwise it will panic.

func (*Stack[T]) Push added in v1.0.1

func (s *Stack[T]) Push(t T)

Push pushes the element to the top of the stack.

func (Stack[T]) Top added in v1.0.1

func (s Stack[T]) Top() T

Top returns the top element in the stack. It must be called when s.IsEmpty() returned false, otherwise it will panic.

func (*Stack[T]) TryPop added in v1.0.1

func (s *Stack[T]) TryPop() (val T, ok bool)

TryPop tries to popup an element from the top of the stack.

type Tuple10E added in v1.0.1

type Tuple10E[A any, B any, C any, D any, E any, F any, G any, H any, I any, J any] struct {
	Tuple9E[A, B, C, D, E, F, G, H, I]
	E10 J
}

func NewTuple10E added in v1.0.1

func NewTuple10E[A any, B any, C any, D any, E any, F any, G any, H any, I any, J any](a A, b B, c C, d D, e E, f F, g G, h H, i I, j J) *Tuple10E[A, B, C, D, E, F, G, H, I, J]

func (*Tuple10E[A, B, C, D, E, F, G, H, I, J]) Unpack added in v1.0.1

func (t *Tuple10E[A, B, C, D, E, F, G, H, I, J]) Unpack() (A, B, C, D, E, F, G, H, I, J)

type Tuple2E added in v1.0.1

type Tuple2E[A any, B any] struct {
	E1 A
	E2 B
}

func NewTuple2E added in v1.0.1

func NewTuple2E[A any, B any](a A, b B) *Tuple2E[A, B]

func (*Tuple2E[A, B]) Unpack added in v1.0.1

func (t *Tuple2E[A, B]) Unpack() (A, B)

type Tuple3E added in v1.0.1

type Tuple3E[A any, B any, C any] struct {
	Tuple2E[A, B]
	E3 C
}

func NewTuple3E added in v1.0.1

func NewTuple3E[A any, B any, C any](a A, b B, c C) *Tuple3E[A, B, C]

func (*Tuple3E[A, B, C]) Unpack added in v1.0.1

func (t *Tuple3E[A, B, C]) Unpack() (A, B, C)

type Tuple4E added in v1.0.1

type Tuple4E[A any, B any, C any, D any] struct {
	Tuple3E[A, B, C]
	E4 D
}

func NewTuple4E added in v1.0.1

func NewTuple4E[A any, B any, C any, D any](a A, b B, c C, d D) *Tuple4E[A, B, C, D]

func (*Tuple4E[A, B, C, D]) Unpack added in v1.0.1

func (t *Tuple4E[A, B, C, D]) Unpack() (A, B, C, D)

type Tuple5E added in v1.0.1

type Tuple5E[A any, B any, C any, D any, E any] struct {
	Tuple4E[A, B, C, D]
	E5 E
}

func NewTuple5E added in v1.0.1

func NewTuple5E[A any, B any, C any, D any, E any](a A, b B, c C, d D, e E) *Tuple5E[A, B, C, D, E]

func (*Tuple5E[A, B, C, D, E]) Unpack added in v1.0.1

func (t *Tuple5E[A, B, C, D, E]) Unpack() (A, B, C, D, E)

type Tuple6E added in v1.0.1

type Tuple6E[A any, B any, C any, D any, E any, F any] struct {
	Tuple5E[A, B, C, D, E]
	E6 F
}

func NewTuple6E added in v1.0.1

func NewTuple6E[A any, B any, C any, D any, E any, F any](a A, b B, c C, d D, e E, f F) *Tuple6E[A, B, C, D, E, F]

func (*Tuple6E[A, B, C, D, E, F]) Unpack added in v1.0.1

func (t *Tuple6E[A, B, C, D, E, F]) Unpack() (A, B, C, D, E, F)

type Tuple7E added in v1.0.1

type Tuple7E[A any, B any, C any, D any, E any, F any, G any] struct {
	Tuple6E[A, B, C, D, E, F]
	E7 G
}

func NewTuple7E added in v1.0.1

func NewTuple7E[A any, B any, C any, D any, E any, F any, G any](a A, b B, c C, d D, e E, f F, g G) *Tuple7E[A, B, C, D, E, F, G]

func (*Tuple7E[A, B, C, D, E, F, G]) Unpack added in v1.0.1

func (t *Tuple7E[A, B, C, D, E, F, G]) Unpack() (A, B, C, D, E, F, G)

type Tuple8E added in v1.0.1

type Tuple8E[A any, B any, C any, D any, E any, F any, G any, H any] struct {
	Tuple7E[A, B, C, D, E, F, G]
	E8 H
}

func NewTuple8E added in v1.0.1

func NewTuple8E[A any, B any, C any, D any, E any, F any, G any, H any](a A, b B, c C, d D, e E, f F, g G, h H) *Tuple8E[A, B, C, D, E, F, G, H]

func (*Tuple8E[A, B, C, D, E, F, G, H]) Unpack added in v1.0.1

func (t *Tuple8E[A, B, C, D, E, F, G, H]) Unpack() (A, B, C, D, E, F, G, H)

type Tuple9E added in v1.0.1

type Tuple9E[A any, B any, C any, D any, E any, F any, G any, H any, I any] struct {
	Tuple8E[A, B, C, D, E, F, G, H]
	E9 I
}

func NewTuple9E added in v1.0.1

func NewTuple9E[A any, B any, C any, D any, E any, F any, G any, H any, I any](a A, b B, c C, d D, e E, f F, g G, h H, i I) *Tuple9E[A, B, C, D, E, F, G, H, I]

func (*Tuple9E[A, B, C, D, E, F, G, H, I]) Unpack added in v1.0.1

func (t *Tuple9E[A, B, C, D, E, F, G, H, I]) Unpack() (A, B, C, D, E, F, G, H, I)

Jump to

Keyboard shortcuts

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