1

我有一个大约 8000000 个 UTF-8 字符的字符串。通过扫描fmt.Scanf()大约需要 10 秒,我怎样才能更快地完成它?我有一个 Cscanf()函数的 Go 包装器,它是我的老师编写的,作为 Go 的 fmt.Scanf() 中的一些错误的解决方法,它可以在 1-2 秒内工作,但我不喜欢使用辅助包来完成​​这些简单的任务。你能推荐一些在纯 Go 中读取字符串的更快方法吗?

4

1 回答 1

6

找到了解决方案。bufio工作得更快(因为它是缓冲的,而fmt's 的功能不是,它不解析任何东西):

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()包装器还要快。

于 2013-02-17T19:13:27.953 回答