Source file
src/maps/maps.go
1
2
3
4
5
6 package maps
7
8 import (
9 _ "unsafe"
10 )
11
12
13
14 func Equal[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool {
15 if len(m1) != len(m2) {
16 return false
17 }
18 for k, v1 := range m1 {
19 if v2, ok := m2[k]; !ok || v1 != v2 {
20 return false
21 }
22 }
23 return true
24 }
25
26
27
28 func EqualFunc[M1 ~map[K]V1, M2 ~map[K]V2, K comparable, V1, V2 any](m1 M1, m2 M2, eq func(V1, V2) bool) bool {
29 if len(m1) != len(m2) {
30 return false
31 }
32 for k, v1 := range m1 {
33 if v2, ok := m2[k]; !ok || !eq(v1, v2) {
34 return false
35 }
36 }
37 return true
38 }
39
40
41
42
43 func clone(m any) any
44
45
46
47 func Clone[M ~map[K]V, K comparable, V any](m M) M {
48
49 if m == nil {
50 return nil
51 }
52 return clone(m).(M)
53 }
54
55
56
57
58
59 func Copy[M1 ~map[K]V, M2 ~map[K]V, K comparable, V any](dst M1, src M2) {
60 for k, v := range src {
61 dst[k] = v
62 }
63 }
64
65
66 func DeleteFunc[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool) {
67 for k, v := range m {
68 if del(k, v) {
69 delete(m, k)
70 }
71 }
72 }
73
View as plain text