Golang文本去重的代码优化问题

180it 2020-10-13 PM 1708℃ 0条

不好意思啊,第一次学Golang,写了个文本去重来练习,文本内容大概75万行,用go test看了下最后的去重时间,需要17’s,想知道还有哪里可以优化的。

代码如下

package distinct
import (
"bufio"
"fmt"
"io"
"os"
"strings"
)
//DistinctFile 为指定文件去重
func DistinctFile(file string, output string) {
// 读取需要去重的文件内容
f, _ := os.Open(file)
defer func() {
ferr := f.Close()
if ferr != nil {
fmt.Println(ferr.Error())
}
}()
reader := bufio.NewReader(f)
// 去重map
var set = make(map[string]bool, 0)
// 去重后的结果
var result string
for {
line, isPrefix, err := reader.ReadLine()
if err != nil {
break
}
if !isPrefix {
lineStr := string(line)
// key存在则跳出本次循环
if set[lineStr] {
continue
}
result += fmt.Sprintf("%sn", lineStr)
set[lineStr] = true
}
}
// 写入另一个文件
nf, _ := os.Create(output)
io.Copy(nf, strings.NewReader(result))
defer nf.Close()
}

// go test的结果是17.654s


package distinct
import "testing"
func TestDistinctFile(t *testing.T) {
DistinctFile("result.txt", "out.txt")
}

希望师傅们能指点一二

回答
var result string使用字符串拼接改为使用strings.Builder提高字符串拼接性能。

var set = make(map[string]bool, 0)改为var set = make(map[string]struct{}, 1000)先预分配1000个空间减少扩容.

来源:https://www.h5w3.com/31196.html

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

Golang文本去重的代码优化问题