1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| package main
import ( "fmt" "strconv" "time" )
func main() { var users = []map[string]string{ { "name": "xmp", "age": "11", }, { "name": "wlm", "age": "24", }, { "name": "wjf", "age": "30", }, { "name": "lm", "age": "50", }, } fmt.Println("总年龄:", ageSum(users))
fmt.Println("总年龄:", handlerMapReduce(users))
fmt.Println("总年龄(过滤40以上和20岁以下):", handlerValidUsers(users)) }
func ageSum(users []map[string]string) int { startTime := time.Now() var result int for _, user := range users { age, _ := strconv.Atoi(user["age"]) result += age } fmt.Println("\tageSum 总耗时:", time.Since(startTime)) return result }
func handlerValidUsers(users []map[string]string) int { validUsers := filterMap(users, func(item map[string]string) bool { ageStr, ok := item["age"] if !ok { return false } age, err := strconv.Atoi(ageStr) if err != nil { return false } if age > 40 || age < 20 { return false } return true }) return handlerMapReduce(validUsers) }
func filterMap(items []map[string]string, f func(map[string]string) bool) []map[string]string { startTime := time.Now() var result []map[string]string for _, item := range items { if f(item) { result = append(result, item) } } fmt.Println("\tfilterMap 总耗时:", time.Since(startTime)) return result }
func handlerMapReduce(users []map[string]string) int { startTime := time.Now() items := mapToString(users, func(user map[string]string) string { return user["age"] }) result := fieldSum(items, func(str string) int { val, _ := strconv.Atoi(str) return val }) fmt.Println("\thandlerMapReduce 总耗时:", time.Since(startTime)) return result }
func mapToString(items []map[string]string, f func(map[string]string) string) []string { newSlice := make([]string, len(items)) for _, item := range items { newSlice = append(newSlice, f(item)) } return newSlice }
func fieldSum(items []string, f func(string) int) int { var result int for _, item := range items { result += f(item) } return result }
|