From 0c6d4ed2e499e3e17165e43803d0d1c6dd0956d9 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 2 Apr 2023 20:22:13 +0300 Subject: initial generics --- ds/arraylist.go | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) (limited to 'ds/arraylist.go') diff --git a/ds/arraylist.go b/ds/arraylist.go index feee14e..de27832 100644 --- a/ds/arraylist.go +++ b/ds/arraylist.go @@ -4,46 +4,54 @@ import ( "fmt" "math/rand" "strings" + "golang.org/x/exp/constraints" ) -// Idea: Once Go got generics use generics here instead of hard coded int type -type ArrayList []int +type Integer interface { + constraints.Integer +} + +type Number interface { + constraints.Integer | constraints.Float +} + +type ArrayList[V Number] []V -func NewArrayList(l int) ArrayList { - return make(ArrayList, l) +func NewArrayList[V Number](l int) ArrayList[V] { + return make(ArrayList[V], l) } -func NewRandomArrayList(l, max int) ArrayList { - a := make(ArrayList, l) +func NewRandomArrayList[V Number](l, max int) ArrayList[V] { + a := make(ArrayList[V], l) for i := 0; i < l; i++ { if max > 0 { - a[i] = rand.Intn(max) + a[i] = V(rand.Intn(max)) continue } - a[i] = rand.Int() + a[i] = V(rand.Int()) } return a } -func NewAscendingArrayList(l int) ArrayList { - a := make(ArrayList, l) +func NewAscendingArrayList[V Number](l int) ArrayList[V] { + a := make(ArrayList[V], l) for i := 0; i < l; i++ { - a[i] = i + a[i] = V(i) } return a } -func NewDescendingArrayList(l int) ArrayList { - a := make(ArrayList, l) +func NewDescendingArrayList[V Number](l int) ArrayList[V] { + a := make(ArrayList[V], l) j := l - 1 for i := 0; i < l; i++ { - a[i] = j + a[i] = V(j) j-- } return a } -func (a ArrayList) FirstN(n int) string { +func (a ArrayList[V]) FirstN(n int) string { var sb strings.Builder j := n @@ -63,7 +71,7 @@ func (a ArrayList) FirstN(n int) string { return sb.String() } -func (a ArrayList) Sorted() bool { +func (a ArrayList[V]) Sorted() bool { for i := len(a) - 1; i > 0; i-- { if a[i] < a[i-1] { return false @@ -72,7 +80,7 @@ func (a ArrayList) Sorted() bool { return true } -func (a ArrayList) Swap(i, j int) { +func (a ArrayList[V]) Swap(i, j int) { aux := a[i] a[i] = a[j] a[j] = aux -- cgit v1.2.3