-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharray.go
More file actions
84 lines (77 loc) · 1.76 KB
/
array.go
File metadata and controls
84 lines (77 loc) · 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package gdk
// ArrayContains return true if this array contains the specified element.
func ArrayContains[E string | int64 | int | float64](array []E, key E) bool {
if len(array) == 0 {
return false
}
for i := 0; i < len(array); i++ {
if array[i] == key {
return true
}
}
return false
}
// ArrayMerge merge two or more arrays into a new array
func ArrayMerge[E string | int64 | int](arraya, arrayb []E, arrays ...[]E) (array []E) {
array = append(arraya, arrayb...)
for _, v := range arrays {
array = append(array, v...)
}
return array
}
// ArraySum sum of the given array
func ArraySum[E int64 | int | float64](array []E) (sum E) {
for i := 0; i < len(array); i++ {
sum += array[i]
}
return sum
}
// ArrayUnique remove Duplicate item of the given array
func ArrayUnique[E int64 | int | string](in []E) (out []E) {
m := make(map[E]struct{})
out = []E{}
for i := 0; i < len(in); i++ {
if _, ok := m[in[i]]; !ok {
out = append(out, in[i])
m[in[i]] = struct{}{}
}
}
return out
}
// ArrayMax return the max one
func ArrayMax[E Ordered](array ...E) E {
if len(array) < 1 {
panic("target 'array' cannot be empty.")
}
// Finds and returns min
max := array[0]
for i := 1; i < len(array); i++ {
if array[i] > max {
max = array[i]
}
}
return max
}
// ArrayMin return the smaller one
func ArrayMin[E Ordered](array ...E) E {
if len(array) < 1 {
panic("target 'array' cannot be empty.")
}
// Finds and returns min
min := array[0]
for i := 1; i < len(array); i++ {
if array[i] < min {
min = array[i]
}
}
return min
}
// ArrayToMap mapping the given array to a map[r]t
func ArrayToMap[E, R, T any](array []E, f TFunc[E, R, T]) (out map[any]T) {
out = make(map[any]T)
for _, v := range array {
r, t := f(v)
out[r] = t
}
return out
}