前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >厚土Go学习笔记 | 24. map字典测试用例(文字出现次数统计)

厚土Go学习笔记 | 24. map字典测试用例(文字出现次数统计)

作者头像
李海彬
发布2018-03-28 11:40:30
6350
发布2018-03-28 11:40:30
举报
文章被收录于专栏:Golang语言社区Golang语言社区

利用map实现字符串内文字出现次数的统计。

编写一个测试用例,对文字计数函数的功能进行测试。

测试通过,则打印文字出现次数的统计结果

代码语言:javascript
复制
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,每个文字都是一个键

运行效果

代码语言:javascript
复制
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}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档