- Notifications
You must be signed in to change notification settings - Fork1
Typesafe Go Data Structure with generics, rich interfaces, functional transformation, and more...
License
NotificationsYou must be signed in to change notification settings
cuzfrog/tgods
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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>
Implementation\Interface | Stack | List | Queue | Deque | Set | Map | MultiMap | Graph |
---|---|---|---|---|---|---|---|---|
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
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
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]()
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...
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...
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
Run test:
go test --tags=test ./...
Cause Chung(cuzfrog@gmail.com)
About
Typesafe Go Data Structure with generics, rich interfaces, functional transformation, and more...
Topics
Resources
License
Stars
Watchers
Forks
Packages0
No packages published