Quick actions

cmd+k|ctrl+k

Navigation

Languages

Array

Snippet info

Language

Go

Visibility

public

Author

max.suclatter

Created

2025-03-30T16:50:16.904915Z

Updated

2025-03-30T17:20:07.164006Z

package main

import (
    "fmt"
    "errors"
)

type Array[T any] struct {
    length int
    data map[int]T
}

func (a Array[T]) Get(index int) (T, error) {
    val, exists := a.data[index]
    if (exists) {
        return val, nil
    }
    return val, errors.New("No value exists in the index position")
}

func (a *Array[T]) Push(val T) {
    (*a).data[(*a).length] = val
    (*a).length++
}

func (a *Array[T]) Pop() T {
    poppedIndex := a.length - 1
    poppedValue := a.data[poppedIndex]
    delete(a.data, poppedIndex)
    a.length--
    return poppedValue
}

func (a *Array[T]) Shift(index int) {
    for i := index; i < a.length; i++ {
        a.data[i] = a.data[i+1]
    }
    delete(a.data, a.length)
}

func (a *Array[T]) Delete(index int) error {
    if (index >= a.length) {
        return errors.New("No item in the index!")
    }
    delete(a.data, index)
    a.length--
    a.Shift(index)
    return nil
}

func NewArray[T any]() Array[T] {
    return Array[T]{length: 0, data: make(map[int]T)}
}

func main() {
    newArray := NewArray[int]()
    fmt.Println(newArray.Get(0))
    
    newArray.Push(1)
    newArray.Push(2)
    // fmt.Println(newArray.Pop())
    // fmt.Println(newArray.data)
    // fmt.Println("Length: ", newArray.length)
    // newArray.Push(2)
    
    fmt.Println(newArray.data)
    fmt.Println(newArray.Delete(2))
    fmt.Println(newArray.Delete(0))
    fmt.Println(newArray.data)
    
    fmt.Println(newArray.Delete(0))
    fmt.Println(newArray.data)
}
INFO