funcSliceTrans[S, Rany](s []S, fn func(S) R) []R { result := make([]R, 0, len(s)) for _, v := range s { result = append(result, fn(v)) } return result }
若只需要转换满足条件的元素,可先过滤再转换:
1 2 3 4 5 6 7 8 9 10
funcSliceTransWithFilter[S, Rany](s []S, fn func(S) (R, bool)) []R { result := make([]R, 0, len(s)) for _, v := range s { if r, ok := fn(v); ok { result = append(result, r) }
funcSliceAccum[S, Rany](init R, s []S, fn func(last R, ele S) R) R { result := init for _, v := range s { result = fn(result, v) }
return result }
字典 map
创建Map
1
var schoolUserMap = map[string]string{}
过滤
方法
1 2 3 4 5 6 7 8 9 10
funcMapFilter[Kcomparable, Vany](m map[K]V, fn func(key K, value V)bool) map[K]V { result := make(map[K]V, len(m)) for k, v := range m { if fn(k, v) { result[k] = v } }
result := utils.MapFilter(userinfo, func(key string, value string)bool { return key == "name" }) fmt.Println(result) }
结果
1
map[name:xiaohong]
转换
方法
1 2 3 4 5 6 7 8 9
funcMapTrans[Kcomparable, V, Rany](m map[K]V, fn func(key K, value V) (R, bool)) map[K]R { result := make(map[K]R, len(m)) for k, v := range m { if r, ok := fn(k, v); ok { result[k] = r } } return result }