- Notifications
You must be signed in to change notification settings - Fork1
Typesafe Go Data Structure with generics, rich interfaces, functional transformation, and more...
License
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
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.