diff options
| author | Paul Buetow <paul@buetow.org> | 2023-04-02 20:22:13 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2023-04-02 20:22:13 +0300 |
| commit | 0c6d4ed2e499e3e17165e43803d0d1c6dd0956d9 (patch) | |
| tree | 6d6a5df53d1dd3e655d24f0423f24bc52ad9784c /ds/arraylist.go | |
| parent | f78ba2cdc6840dbc52a27a2f9fac28f3b61e8b7b (diff) | |
initial generics
Diffstat (limited to 'ds/arraylist.go')
| -rw-r--r-- | ds/arraylist.go | 42 |
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 |
