initial commit
This commit is contained in:
commit
f7ab541d0a
7
comparator.go
Normal file
7
comparator.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package slices
|
||||||
|
|
||||||
|
type EqualityComparator[T comparable] func(a, b T) bool
|
||||||
|
|
||||||
|
func DefaultEqualityComparator[T comparable](a, b T) bool {
|
||||||
|
return a == b
|
||||||
|
}
|
5
go.mod
Normal file
5
go.mod
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
module git.milar.in/milarin/slices
|
||||||
|
|
||||||
|
go 1.19
|
||||||
|
|
||||||
|
require git.milar.in/milarin/channel v0.0.7
|
2
go.sum
Normal file
2
go.sum
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
git.milar.in/milarin/channel v0.0.7 h1:cVKtwgH/EE7U+XTHcoFCClJ4LR349KanzjX9xKwRcNg=
|
||||||
|
git.milar.in/milarin/channel v0.0.7/go.mod h1:We83LTI8S7u7II3pD+A2ChCDWJfCkcBUCUqii9HjTtM=
|
52
slices.go
Normal file
52
slices.go
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
package slices
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.milar.in/milarin/channel"
|
||||||
|
)
|
||||||
|
|
||||||
|
func IndexOf[T comparable](slice []T, value T) int {
|
||||||
|
return IndexOfCmp(slice, value, DefaultEqualityComparator[T])
|
||||||
|
}
|
||||||
|
|
||||||
|
func IndexOfCmp[T comparable](slice []T, value T, cmp EqualityComparator[T]) int {
|
||||||
|
for i, v := range slice {
|
||||||
|
if cmp(v, value) {
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func Contains[T comparable](slice []T, value T) bool {
|
||||||
|
return ContainsCmp(slice, value, DefaultEqualityComparator[T])
|
||||||
|
}
|
||||||
|
|
||||||
|
func ContainsCmp[T comparable](slice []T, value T, cmp EqualityComparator[T]) bool {
|
||||||
|
return IndexOfCmp(slice, value, cmp) != -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func Map[I, O any](slice []I, mapper func(I) O) []O {
|
||||||
|
ret := make([]O, 0, len(slice))
|
||||||
|
for _, v := range slice {
|
||||||
|
ret = append(ret, mapper(v))
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func MapParallel[I, O any](slice []I, mapper func(I) O) []O {
|
||||||
|
return channel.ToSlice(channel.Map(channel.Of(slice...), mapper))
|
||||||
|
}
|
||||||
|
|
||||||
|
func MapParallelWithRunner[I, O any](slice []I, runner channel.Runner, mapper func(I) O) []O {
|
||||||
|
return channel.ToSlice(channel.MapWithRunner(channel.Of(slice...), runner, mapper))
|
||||||
|
}
|
||||||
|
|
||||||
|
func Each[T any](slice []T, f func(T)) {
|
||||||
|
EachIndex(slice, func(_ int, v T) { f(v) })
|
||||||
|
}
|
||||||
|
|
||||||
|
func EachIndex[T any](slice []T, f func(int, T)) {
|
||||||
|
for i, v := range slice {
|
||||||
|
f(i, v)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user