该程序应该读取由整数对(每行一对)组成的文件并删除重复的对。虽然它适用于小文件,但它会在大文件(比如 1.5 GB 的文件)上引发运行时错误。最初,我认为是地图数据结构导致了这种情况,但即使将其注释掉,它仍然内存不足。任何想法为什么会发生这种情况?如何纠正?这是一个内存不足的数据文件:http : //snap.stanford.edu/data/com-Orkut.htmlpackage mainimport ( "fmt" "bufio" "os" "strings" "strconv")func main() { file, err := os.Open(os.Args[1]) if err != nil { panic(err.Error()) } defer file.Close() type Edge struct { u, v int } //seen := make(map[Edge]bool) edges := []Edge{} scanner := bufio.NewScanner(file) for i, _ := strconv.Atoi(os.Args[2]); i > 0; i-- { scanner.Scan() } for scanner.Scan() { str := scanner.Text() edge := strings.Split(str, ",") u, _ := strconv.Atoi(edge[0]) v, _ := strconv.Atoi(edge[1]) var key Edge if u < v { key = Edge{u,v} } else { key = Edge{v,u} } //if seen[key] { // continue //} //seen[key] = true edges = append(edges, key) } for _, e := range edges { s := strconv.Itoa(e.u) + "," + strconv.Itoa(e.v) fmt.Println(s) }}下面给出了一个示例输入。该程序可以按如下方式运行(最后一个输入表示要跳过多少行)。去运行 undup.go a.txt 1# 3072441,1171850831,21,31,41,51,61,71,8
2 回答
- 2 回答
- 0 关注
- 209 浏览
添加回答
举报
0/150
提交
取消