exercism/go/strain/strain.go

55 lines
1.1 KiB
Go

package strain
// Ints is a slice of int
type Ints []int
// Lists is a slice of int slices
type Lists [][]int
// Strings is a slice of strings
type Strings []string
// Keep runs the Ints through a function and returns the ones that succeed
func (i Ints) Keep(kf func(int) bool) Ints {
var ret Ints
for idx := range i {
if kf(i[idx]) {
ret = append(ret, i[idx])
}
}
return ret
}
// Discard runs the Ints through a function and returns the ones that fail
func (i Ints) Discard(df func(int) bool) Ints {
var ret Ints
for idx := range i {
if !df(i[idx]) {
ret = append(ret, i[idx])
}
}
return ret
}
// Keep runs the Lists through a function and returns the ones that succeed
func (l Lists) Keep(kf func([]int) bool) Lists {
var ret Lists
for idx := range l {
if kf(l[idx]) {
ret = append(ret, l[idx])
}
}
return ret
}
// Keep runs the Strings through a function and returns the ones that succeed
func (s Strings) Keep(kf func(string) bool) Strings {
var ret Strings
for idx := range s {
if kf(s[idx]) {
ret = append(ret, s[idx])
}
}
return ret
}