91 lines
1.6 KiB
Go
91 lines
1.6 KiB
Go
package main
|
|
|
|
import ("fmt"; "strings")
|
|
|
|
func Index(elems []string, val string) int {
|
|
for i, v := range elems {
|
|
if v == val {
|
|
return i
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
func Include(elems []string, val string) bool {
|
|
return Index(elems, val) >= 0
|
|
}
|
|
|
|
func Any(elems []string, f func(string)bool) bool {
|
|
for _, v := range elems {
|
|
if f(v) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func All(elems []string, f func(string)bool) bool {
|
|
for _, v := range elems {
|
|
if !f(v) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func Filter(elems []string, f func(string)bool) []string {
|
|
filtered := []string{}
|
|
for _, v := range elems {
|
|
if f(v) {
|
|
filtered = append(filtered, v)
|
|
}
|
|
}
|
|
return filtered
|
|
}
|
|
|
|
func Map(elems []string, f func(string)string) []string {
|
|
mapped := make([]string, len(elems))
|
|
for i, v := range elems {
|
|
mapped[i] = f(v)
|
|
}
|
|
return mapped
|
|
}
|
|
|
|
func main() {
|
|
var elems = []string{"peach", "apple", "pear", "banana"}
|
|
|
|
fmt.Println(Index(elems, "pear"))
|
|
fmt.Println(Index(elems, "grape"))
|
|
fmt.Println()
|
|
|
|
fmt.Println(Include(elems, "pear"))
|
|
fmt.Println(Include(elems, "grape"))
|
|
fmt.Println()
|
|
|
|
fmt.Println(Any(elems, func(v string) bool {
|
|
return strings.HasPrefix(v, "p")
|
|
}))
|
|
fmt.Println(Any(elems, func(v string) bool {
|
|
return strings.HasPrefix(v, "g")
|
|
}))
|
|
fmt.Println()
|
|
|
|
fmt.Println(All(elems, func(v string) bool {
|
|
return strings.Contains(v, "a")
|
|
}))
|
|
fmt.Println(All(elems, func(v string) bool {
|
|
return strings.Contains(v, "p")
|
|
}))
|
|
fmt.Println()
|
|
|
|
fmt.Println(Filter(elems, func(v string) bool {
|
|
return strings.Contains(v, "p")
|
|
}))
|
|
fmt.Println()
|
|
|
|
fmt.Println(Map(elems, func(s string) string {
|
|
return strings.ToUpper(s)
|
|
}))
|
|
fmt.Println()
|
|
}
|