summaryrefslogtreecommitdiff
path: root/ds/arraylist.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2023-04-02 20:22:13 +0300
committerPaul Buetow <paul@buetow.org>2023-04-02 20:22:13 +0300
commit0c6d4ed2e499e3e17165e43803d0d1c6dd0956d9 (patch)
tree6d6a5df53d1dd3e655d24f0423f24bc52ad9784c /ds/arraylist.go
parentf78ba2cdc6840dbc52a27a2f9fac28f3b61e8b7b (diff)
initial generics
Diffstat (limited to 'ds/arraylist.go')
-rw-r--r--ds/arraylist.go42
1 files changed, 25 insertions, 17 deletions
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