initial commit
This commit is contained in:
		
							
								
								
									
										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)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user