【发布时间】:2014-01-27 16:18:07
【问题描述】:
如何使用 GO 计算文本文件中恰好出现一次的字符串数? 看了一些golang的包说明,也许我应该使用bufio.NewScanner一次一行读取传入文件的内容。然后我尝试使用 map 来统计每个字符串的出现次数:
stringcount := make(map[string]int)
如何更新这个空地图的数据?比如文件中第一个字符串是“hello”,如何让stringcount["hello"] = 1?
这是我的尝试:
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
frequencyofWord := map[string]int{}
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading standard input:", err)
}
s := strings.Fields(scanner.Text()) //one more question : is strings.Fields used correctly here?
countSingleton(s)
}
func countSingleton(a []string) {
//here how to update the map according to the text read ?//
}
【问题讨论】:
-
请更新您的帖子以反映您提出的实际问题。您是在问扫描仪和阅读器之间的区别是什么?您是否在问如何在列表中找到唯一的字符串?您是在问如何从文件中读取行吗?不要同时问三个人。我怀疑这些问题中的每一个都已经在其他地方得到了回答,但是一些明确的信息将帮助我们指出你需要去哪里。
-
感谢回复,我会尽量说清楚的。主要问题是如何在文本文件中找到唯一字符串,并输出该文件中有多少个唯一字符串。
-
听起来你在问地图。你看完教程了吗? tour.golang.org
-
@KyleLemons 是的,我做到了,但这次旅行只给出了将固定值分配给地图的示例。我想知道将文件作为输入时该怎么做。我再次更新我的问题,给出我试图做的事情。
-
@user3221327 你确定你的意思是 string 吗?因为将文本文件的每个子字符串与其他子字符串进行检查非常昂贵。