Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Typesafe Go Data Structure with generics, rich interfaces, functional transformation, and more...

License

NotificationsYou must be signed in to change notification settings

cuzfrog/tgods

Repository files navigation

CIcodecovCodacy Badge

Typesafe Go Data Structures

Your brand-new Golang collections implementation with generics.Go version >=1.18. If facing compiler issue, please upgrade to1.19.

go get github.com/cuzfrog/tgods@<version>

Interfaces

Implementation\InterfaceStackListQueueDequeSetMapMultiMapGraph
arrayStack✔️
circularArray✔️✔️✔️✔️
linkedList✔️✔️✔️✔️
binaryHeap✔️
rbTree✔️✔️
hashTable✔️✔️
linkedHashTable✔️✔️
enumMap✔️
enumSet✔️
multiMap✔️✔️
treeAdjacencyList✔️

Top interfaceCollection contains general methods, sub-interfaces likeArrayList,SortedSet,SortedMap provide more rich functionalities.All interface definitions can be found:here

Data Structures:

  • arrayStack - fixed length first-in-last-out array based stack. Backing upStack
  • circularArray - variable length/cap array with fast add/remove at head or tail and random access with index. Backing upStack,ArrayList,Queue,Deque
  • linkedList - doubly linked list with fast add/remove. Backing upStack,LinkedList,Queue,Deque
  • binaryHeap - binary heap based min or max priority queue. Backing upQueue
  • rbTree - recursion-free red black tree implementation. Backing upSortedSet,SortedMap
  • hashTable - variable length/cap array based hash table, hash collision is handled by linked nodes. Backing upSet,Map
  • linkedHashTable hashTable preserving inserting or configurable access order. Can serve as anLRU cache. Backing upLinkedSet,LinkedMap
  • enumMap &enumSet fast array based map and set withInteger as the key. ImplementingSortedMap,SortedSet respectively.
  • multiMap multimap implementation witharrayListMultiMap andhashSetMultiMap constructors.
  • treeAdjacencyList a treeMap based graph implementation with directional edge properties.It has typicalO(log(n)) time complexity for adding, searching, and removing vertices. Backing upGraph

Usage:

Rich Constructors:

import"github.com/cuzfrog/tgods/collections"list:=collections.NewLinkedListOf(1,2,3)// List[int]list:=collections.NewArrayListOf(1,2,3)// List[int]queue:=collections.NewLinkedListQueue[int]()// Queue[int]queue:=collections.NewArrayListQueue[int]()// Queue[int]hashMap:=collections.NewHashMapOf[string,int](funcs.NewStrHash(),funcs.ValueEqual[string])// Map[string, int]hashMap:=collections.NewHashMapOfStrKey[int](EntryOf("Earth",3),EntryOf("Mars",4))// Map[string, int]cache:=collections.NewLRUCacheOfStrKey[int](40,collections.PutOrder+collections.GetOrder)// LRU cache[string, int] of size limit 40// more...

Client implementation ofconstraint interfaces to simplify collection creation:

typemyStructstruct {...}func (s*myStruct)Hash()uint {...}func (s*myStruct)Equal(other*myStruct)bool {...}hashSet:=collections.NewHashSetC[*myStruct]()

Functional Transformation

import"github.com/cuzfrog/tgods/transform"c:=collections.NewArrayListOf(1,3,4)l:=collections.NewLinkedListOf[string]()transform.MapTo[int,string](c,l,func(elemint)string {returnfmt.Sprint(elem) })// l ["1", "2", "3"]listOfList:=...// List[List[int]] [[1, 3], [2, 4]]list:=NewArrayListOf[int]()transform.FlattenTo[types.List[int],int](listOfList,list)// list [1, 3, 2, 4]c:=collections.NewArrayListOf(1,3,4)transform.Reduce[int,string](c,"",func(accstring,nextint)string {returnacc+strconv.Itoa(next) })// "134"c:= []int{1,3,4}transform.CountSlice[int](c,func(elemint)bool {returnelem>2})// 2, yeah for slices, also has Count for Collection// more...

Built-in Utils & Functions:

import"github.com/cuzfrog/tgods/utils"list:=collections.NewArrayListOf(1,3,2)// ArrayList 1, 3, 2list.Sort(funcs.ValueLess[int])// ArrayList 1, 2, 3utils.StringFrom(list)// [1, 2, 3]utils.SliceFrom(list)// []int{1, 2, 3}m:=// Map [1->"a", 2->"b"]utils.KeysFrom(m)// [1, 2]// functions:import"github.com/cuzfrog/tgods/funcs"funcs.NewStrHash()// func(s string) uint, create a string hash function based on 64bit or 32bit platformfuncs.ValueEqual// (a, b comparable) bool// HOFs:funcs.CompToEq// func(comp Compare[T]) Equal[T]funcs.InverseComp// func(comp Compare[T]) Compare[T]// more...

Semantic Iteration:

Iteration behavior is based on which interface type is constructed.

list:=collections.NewLinkedListOf[int]()// interface List[int], implementation linkedList[int]list.Add(1)list.Add(2)list.Add(3)list.Each(func (i,vint) {fmt.Print(v)})// 123stack:=collections.NewLinkedListStack[int]()// interface Stack[int], implementation linkedList[int]stack.Push(1)stack.Push(2)stack.Push(3)stack.Each(func (i,vint) {fmt.Print(v)})// 321

Development

Run test:

go test --tags=test ./...

Author

Cause Chung(cuzfrog@gmail.com)


[8]ページ先頭

©2009-2025 Movatter.jp