-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSliceUniqure.go
49 lines (45 loc) · 864 Bytes
/
SliceUniqure.go
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
package csy
import (
"math"
"reflect"
)
func SliceUnique[T any](arr []T) (newArr []T) {
newArr = make([]T, 0)
for i := 0; i < len(arr); i++ {
repeat := false
for j := i + 1; j < len(arr); j++ {
if reflect.DeepEqual(arr[i], arr[j]) {
repeat = true
break
}
}
if !repeat {
newArr = append(newArr, arr[i])
}
}
return
}
func SliceChunk[T any](s []T, size int) [][]T {
if size < 1 {
return [][]T{}
}
length := len(s)
chunks := int(math.Ceil(float64(length) / float64(size)))
var n [][]T
for i, end := 0, 0; chunks > 0; chunks-- {
end = (i + 1) * size
if end > length {
end = length
}
n = append(n, s[i*size:end])
i++
}
return n
}
func SliceReverse[T any](slice []T) []T {
reversed := make([]T, len(slice))
for i, j := len(slice)-1, 0; i >= 0; i, j = i-1, j+1 {
reversed[j] = slice[i]
}
return reversed
}