
但是,我想知道是否有更有效的方法在数据结构上创建一个特定的map函数,该数据结构不涉及遍历整个列表并应用该函数,或者这是其他语言支持泛型的幕后 *** 作.
例:
func map(List []string,op func(string)string) []string { ouput := make([]string,len(List)) for i,v := range List { output[i] = op(v) } return output} 谢谢!
解决方法 仅供参考,地图是保留字,因此您无法使您的功能与使用小写地图完全一致.这可能就像你能得到的一样好.泛型不会让你分配新的内存.
使用append()稍微快一些,而不是在开始时将整个切片初始化为空字符串.例如:
func Map(List []string,op func(string) string) []string { output := make([]string,len(List)) for _,v := range List { output = append(output,op(v)) } return output} 这让我的速度增加了10%.
更新:这只适用于非常短的切片.这是一个更彻底的基准 – 在更长的切片上使用追加实际上更慢.我也试过并行化,这只是在更大的切片上的开销.
码:
https://gist.github.com/8250514
输出(测试名称末尾的数字是切片长度):
go test -bench=".*" -test.cpu=2BenchmarkSliceMake10-2 5000000 473 ns/opBenchmarkSliceMake100-2 500000 3637 ns/opBenchmarkSliceMake1000-2 50000 43920 ns/opBenchmarkSliceMake10000-2 5000 539743 ns/opBenchmarkSliceAppend10-2 5000000 464 ns/opBenchmarkSliceAppend100-2 500000 4303 ns/opBenchmarkSliceAppend1000-2 50000 51172 ns/opBenchmarkSliceAppend10000-2 5000 595650 ns/opBenchmarkSlicePar10-2 500000 3784 ns/opBenchmarkSlicePar100-2 200000 7940 ns/opBenchmarkSlicePar1000-2 50000 50118 ns/opBenchmarkSlicePar10000-2 5000 465540 ns/op总结
以上是内存溢出为你收集整理的泛型 – Golang效率中的非通用映射全部内容,希望文章能够帮你解决泛型 – Golang效率中的非通用映射所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)