...
1 package array
2
3 func Map[T any, P any](array []T, function func(T) P) []P {
4 result := make([]P, len(array))
5 for i, t := range array {
6 result[i] = function(t)
7 }
8 return result
9 }
10
11 func FindFirstIndex[T any](array []T, function func(T) bool) int {
12 for i, t := range array {
13 if function(t) {
14 return i
15 }
16 }
17 return -1
18 }
19
20 func FindFirstIndexMatching[T comparable](array []T, toSearch T) int {
21 return FindFirstIndex(array, equals(toSearch))
22 }
23
24 func FindFirst[T any](array []T, function func(T) bool) *T {
25 i := FindFirstIndex(array, function)
26 if i >= 0 && i < len(array) {
27 return &array[i]
28 }
29 return nil
30 }
31
32 func Any[T any](array []T, function func(T) bool) bool {
33 for _, t := range array {
34 if function(t) {
35 return true
36 }
37 }
38 return false
39 }
40
41 func All[T any](array []T, function func(T) bool) bool {
42 return !Any(array, inverse(function))
43 }
44
45 func Filter[T any](array []T, function func(T) bool) []T {
46 var i = 0
47 result := make([]T, len(array))
48 for _, t := range array {
49 if function(t) {
50 result[i] = t
51 i++
52 }
53 }
54 return result[:i]
55 }
56
View as plain text