enumerable
This commit is contained in:
parent
75c4431895
commit
e9f8486f4e
2
README
2
README
@ -81,5 +81,3 @@ gobyexample.com signups
|
||||
* time
|
||||
* oauth for google domains
|
||||
* connection pool
|
||||
* ruby enumerable
|
||||
* ruby string
|
||||
|
90
src/xx-enumerable.go
Normal file
90
src/xx-enumerable.go
Normal file
@ -0,0 +1,90 @@
|
||||
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()
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user