24. map字典测试用例(文字出现次数统计)

利用map实现字符串内文字出现次数的统计。
编写一个测试用例,对文字计数函数的功能进行测试。
测试通过,则打印文字出现次数的统计结果

package main

import (
    "fmt"
    "strings"
)
//测试调用
func Test(f func(string) map[string]int) {
    ok := true
    for _, c := range testCases {
        got := f(c.in)
        if len(c.want) != len(got) {
            ok = false
        } else {
            for k := range c.want {
                if c.want[k] != got[k] {
                    ok = false
                }
            }
        }
        if !ok {
            fmt.Printf("FAIL\n f(%q) =\n  %#v\n want:\n  %#v",
                c.in, got, c.want)
            break
        }
        fmt.Printf("PASS\n f(%q) = \n  %#v\n", c.in, got)
    }
}

//测试用例
var testCases = []struct {
    in   string
    want map[string]int
}{
    {"I am learning Go!", map[string]int{
        "I": 1, "am": 1, "learning": 1, "Go!": 1,
    }},
    {"The quick brown fox jumped over the lazy dog.", map[string]int{
        "The":  1, "quick": 1, "brown": 1, "fox": 1, "jumped": 1,
        "over": 1, "the": 1, "lazy": 1, "dog.": 1,
    }},
    {"I ate a donut. Then I ate another donut.", map[string]int{
        "I": 2, "ate": 2, "a": 1, "donut.": 2, "Then": 1, "another": 1,
    }},
    {"A man a plan a canal panama.", map[string]int{
        "A": 1, "man": 1, "a": 2, "plan": 1, "canal": 1, "panama.": 1,
    }},
}
//文字出现次数统计
func WordCount(s string) map[string]int {
    s0 := strings.Fields(s)

    s1 := make(map[string]int)
    for _, k := range s0 {
        _, ok := s1[k]
        if !ok {
            s1[k] = 1
        }else{
            s1[k] += 1
        }
    }

    return s1
    //return map[string]int{"x": 1}
}

func main() {
    Test(WordCount)
}

WordCount实现文字次数统计
s0是对原来句子中的文字建立切片
s1是统计后的结果map,每个文字都是一个键
运行效果

PASS
 f("I am learning Go!") = 
  map[string]int{"I":1, "am":1, "learning":1, "Go!":1}
PASS
 f("The quick brown fox jumped over the lazy dog.") = 
  map[string]int{"brown":1, "the":1, "jumped":1, "over":1, "lazy":1, "dog.":1, "The":1, "quick":1, "fox":1}
PASS
 f("I ate a donut. Then I ate another donut.") = 
  map[string]int{"ate":2, "a":1, "donut.":2, "Then":1, "another":1, "I":2}
PASS
 f("A man a plan a canal panama.") = 
  map[string]int{"A":1, "man":1, "a":2, "plan":1, "canal":1, "panama.":1}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目的这篇教程从用户的角度出发,全面地介绍了Hadoop Map/Reduce框架的各个方面。先决条件请先确认Had...
    SeanC52111阅读 5,693评论 0 1
  • MapReduce执行流程 MapReduce的执行步骤 1、Map任务处理 1.1 读取HDFS中的文件。每一行...
    依天立业阅读 6,648评论 0 8
  • 转自: 结构之法算法之道blog 前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都...
    王帅199207阅读 4,849评论 0 13
  • 心里的人总在远方 而我 向往远方 却又害怕远方 情绪上来的时候我需要以自己的方式释放一下 比如一个人哭一会儿 然后...
    傻瓜与智者阅读 2,801评论 0 1
  • 简书一篇 看了简书的风格,自己觉得挺喜欢。 现在还搞不清楚简书上面都可以写哪类的文字,流水账先来一笔吧。 希望在以...
    无思想家阅读 1,384评论 0 0