为了账号安全,请及时绑定邮箱和手机立即绑定

大UTF-8字符串的快速fmt.Scanf()

大UTF-8字符串的快速fmt.Scanf()

Go
慕妹3242003 2021-05-05 16:23:59
我有大约8000000个UTF-8字符的字符串。扫描fmt.Scanf()大约需要10秒钟,如何才能更快地完成扫描?我有一个用于Cscanf()函数的Go包装器,它是由我的老师写的,作为Go的fmt.Scanf()中某些错误的解决方法,它可以在1-2秒内起作用,但是我不喜欢将辅助包装用于这样的简单任务。您能建议一种更快的方式来读取纯Go中的字符串吗?
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

找到了解决方案。bufio工作得更快(因为它被缓冲了,而fmt函数没有,并且它不解析任何内容):


reader := bufio.NewReader(os.Stdin)

str, _ := reader.ReadString('\n')   // Like fmt.Scanf("%s", &str), but faster

var x, y rune

fmt.Fscanf(reader, "%c %c", &x, &y) // I need to read something else

                                    // (see comments for the question)

                                    // It's easy, as I can use fmt.Fscanf

...甚至比那个Cscanf()包装器还快。


查看完整回答
反对 回复 2021-05-31
  • 1 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信