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