enumerable
This commit is contained in:
parent
75c4431895
commit
e9f8486f4e
2
README
2
README
@ -81,5 +81,3 @@ gobyexample.com signups
|
|||||||
* time
|
* time
|
||||||
* oauth for google domains
|
* oauth for google domains
|
||||||
* connection pool
|
* 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