【问题标题】:Count the number of singletons in a text file using Golang使用 Golang 计算文本文件中的单例数
【发布时间】: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 吗?因为将文本文件的每个子字符串与其他子字符串进行检查非常昂贵。

标签: string count go singleton


【解决方案1】:

使用bufio.NewScanner分行,使用strings.Fields获取单词,使用yourMap[theWord]++统计单词。

示例:http://play.golang.org/p/3H6gfBlQL5

要获取唯一单词的列表,请将映射键上的iterateappend 转换为slice,然后sort 它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多