泛型 – Golang效率中的非通用映射

泛型 – Golang效率中的非通用映射,第1张

概述我完全理解Go不提供对泛型的支持,而是选择用户在需要时创建自己的特定于类型的方法. 但是,我想知道是否有更有效的方法在数据结构上创建一个特定的map函数,该数据结构不涉及遍历整个列表并应用该函数,或者这是其他语言支持泛型的幕后 *** 作. 例: func map(list []string, op func(string)string) []string { ouput := make([]stri 我完全理解Go不提供对泛型的支持,而是选择用户在需要时创建自己的特定于类型的方法.

但是,我想知道是否有更有效的方法在数据结构上创建一个特定的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效率中的非通用映射所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1264991.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存