tuple and code cleanup

This commit is contained in:
2026-02-09 16:31:39 +03:00
parent 4ba746956a
commit 06327013fd
5 changed files with 222 additions and 133 deletions

52
map.go
View File

@@ -1,5 +1,7 @@
package extypes
import "reflect"
type HashMap[K comparable, V any] map[K]V
func NewMapFrom[K comparable, V any](m map[K]V) HashMap[K, V] {
@@ -9,9 +11,7 @@ func NewMapFrom[K comparable, V any](m map[K]V) HashMap[K, V] {
}
return out
}
func (m HashMap[K, V]) Len() int {
return len(m)
}
func (m HashMap[K, V]) Len() int { return len(m) }
func (m HashMap[K, V]) Add(key K, val V) HashMap[K, V] {
m[key] = val
return m
@@ -20,9 +20,7 @@ func (m HashMap[K, V]) Remove(key K) HashMap[K, V] {
delete(m, key)
return m
}
func (m HashMap[K, V]) Get(key K) V {
return m[key]
}
func (m HashMap[K, V]) Get(key K) V { return m[key] }
func (m HashMap[K, V]) GetOrDefault(key K, def V) V {
v, ok := m[key]
if !ok {
@@ -34,6 +32,26 @@ func (m HashMap[K, V]) Contains(key K) bool {
_, ok := m[key]
return ok
}
func (m HashMap[K, V]) IndexKey(key K) int {
index := 0
for k, _ := range m {
if k == key {
return index
}
index++
}
return -1
}
func (m HashMap[K, V]) IndexValue(value V) int {
index := 0
for _, v := range m {
if reflect.DeepEqual(value, v) {
return index
}
index++
}
return -1
}
func (m HashMap[K, V]) Keys() []K {
keys := make([]K, 0, m.Len())
for k := range m {
@@ -48,6 +66,16 @@ func (m HashMap[K, V]) Values() []V {
}
return values
}
func (m HashMap[K, V]) Items() ([]K, []V) {
keys := make(Slice[K], 0, m.Len())
values := make(Slice[V], 0, m.Len())
for k, v := range m {
keys = keys.Push(k)
values = values.Push(v)
}
return keys, values
}
func (m HashMap[K, V]) Filter(f func(K, V) bool) HashMap[K, V] {
out := make(HashMap[K, V])
for k, v := range m {
@@ -58,3 +86,15 @@ func (m HashMap[K, V]) Filter(f func(K, V) bool) HashMap[K, V] {
}
return out
}
func (m HashMap[K, V]) ForEach(f func(K, V)) HashMap[K, V] {
for k, v := range m {
f(k, v)
}
return m
}
func (m HashMap[K, V]) Map(f func(K, V) V) HashMap[K, V] {
for k, v := range m {
m[k] = f(k, v)
}
return m
}