Golang中也有实用的泛型编程模板。如map。据Go官方团队称,其实现为Hash表,而非类似cpp或Java的红黑树。所以理论上速度更能快上几个等级(Hash与红黑树的效率对比可以看我的文章C++中各种<string,T>关联方式的速度对比,效率比约为3:1),但有一些区别,就是遍历时,数据是无需且随机的(当然,后文会讲到有序化的方法)。接下来,我们先创建一个map对象。

    dict:=make(map[string]int);

  由于map的强类型,所以一切类型是静态的,map也不例外。从make函数中可以看出,本map的索引(键)值是一个string类型,而数据值是一个整数。下面,我们向其中插入一个键值对。

    dict["is"]:=1;

  很简单,没有必要用其他成员函数,直接用与数组一样的访问方法即可,简单、自然。

  如果一个map已经建立好了,怎么输出呢。由于其中的每个数据都是一个pair,所以for循环遍历时也要用两个变量来分别表示键与值。如此(k为键,v为数据值):

    for k,v:=range gets{
      fmt.Printf("\"%s\": %d\n", k, v)
    }

  知道这些就可以顺利地制作单词统计器了。思路实在太简单,然而,这并不是重点——重心总会使两边平衡。写完前文的单词统计器以后,有可能你就会发现,输出的数据完全无需,不仅和键无关,甚至和插入顺序也毫无联系(侧面证明了底层确实为Hash表实现)。要使输出按原文中每个单词出现的首次来排序的话,或许需要这么实现:用两个map!

  设这里有两个map(map[string]int)map1和map2。map1储存位置,map2储存值。每次插入的时候需要这么做(设key为键,value为值,i为单词的位置):

    map1[key]=min(map1[key],i);//先得设成一个较大数

    map2[key]=map2[key]+1;

  输出的时候,则先取出map中所有元素,然后以map1作为关键字升序排序,最后输出map2的键值对即可。

  

Golang,用map写个单词统计器的更多相关文章

  1. 软工之词频统计器及基于sketch在大数据下的词频统计设计

    目录 摘要 算法关键 红黑树 稳定排序 代码框架 .h文件: .cpp文件 频率统计器的实现 接口设计与实现 接口设计 核心功能词频统计器流程 效果 单元测试 性能分析 性能分析图 问题发现 解决方案 ...

  2. 给 VS 2010 选一个好用的代码行数统计器(转)

    给 VS 2010 选一个好用的代码行数统计器 分类: Tricks2011-02-25 05:40 3891人阅读 评论(0) 收藏 举报 2010c 推荐一个VS插件,支持2005/2008/20 ...

  3. Guava缓存器源码分析——缓存统计器

    Guava缓存器统计器实现: 全局统计器——         1.CacheBuilder的静态成员变量Supplier<StatsCounter> CACHE_STATS_COUNTER ...

  4. Golang中map的三种声明方式和简单实现增删改查

    package main import ( "fmt" ) func main() { test3 := map[string]string{ "one": & ...

  5. IntelliJ IDEA 2017版 编译器使用学习笔记(九)(图文详尽版);IDE使用的有趣的插件;IDE代码统计器;Mybatis插件

    一.代码统计器,按照名字搜索即可,在file===setting------plugin 使用右键项目:点击自动统计 二.json转实体类 三.自动找寻bug插件 四.Remind me工具 五.检测 ...

  6. 总结golang之map

    总结golang之map 2017年04月13日 23:35:53 趁年轻造起来 阅读数:18637 标签: golangmapgo 更多 个人分类: golang   版权声明:本文为博主原创文章, ...

  7. golang 中 map 转 struct

    golang 中 map 转 struct package main import ( "fmt" "github.com/goinggo/mapstructure&qu ...

  8. golang之map的使用声明

    1.map的基本介绍 map是key-value数据结构,又称为字段或者关联数组.类似其它编程语言的集合,在编程中是经常使用到的 2.map的声明 1)基本语法 var map 变量名 map[key ...

  9. HDFS 手写mapreduce单词计数框架

    一.数据处理类 package com.css.hdfs; import java.io.BufferedReader; import java.io.IOException; import java ...

随机推荐

  1. Servlet+Tomcat 界面登录

    1.文件夹建立(必须按照这个规范,文件名和文件夹名必须一致) a.在%TOMCAT_HOME%\webapps下建立一个文件夹,取名MyWebsit b.在MyWebsit文件夹下新建WEB_INF文 ...

  2. BootStrap最常用的几个插件(V3.3.0版)

    1.标签页 <!-- Nav tabs --> <ul class="nav nav-tabs" role="tablist"> < ...

  3. React-native 中的触摸响应功能

    我们在做APP的时候,与桌面应用系统不同的是触摸响应. web页面对触摸响应的支持和原生的APP有着很大的差异. 基本用法 componentWillMount: function() { this. ...

  4. SCOM MP中的PowerShell脚本

    该脚本可在MP中运行 #param ($file,$threshold) #此处可定义file 和 threshold 参数,该参数可以从脚本外部接收 $threshold = 10 $file = ...

  5. 从零开始学android开发-字符如何转换整形 string 转化为int

    int i = Integer.parseInt(string);

  6. Samba Linux和Windows互访

    之前一直用的sshfs manager,但是会出现造成电脑黑屏的情况.网上也没找到其它类似的软件. 后面打算用Samba 直接搜到一篇很强大的文章. 1.  下载及安装Samba 推荐用yum来安装, ...

  7. SVN安装笔记

    1.先去以下网址去下载服务器端与客户端的SVN 2.服务端SVN的安装 点击next 点击next 再点击next 点击next 点击install 点击Finish,这样服务器端的SVN就安装好了, ...

  8. 优麒麟(UbuntuKylin)不是国产Linux操作系统

    2014年5月10日,CCTV新闻频道"新闻直播间"栏目播报了"谁来替代Windows XP,工信部希望用户使用国产操作系统"报道.同一时候,央视也报道了眼下包 ...

  9. Starling性能优化技巧十五则

    Starling的性能优化要点 一.尽可能减少状态变更 如您所知,Starling使用Stage3D来渲染所有的可见对象.这就意味着所有的绘制都是GPU完成的. 现在,Starling可以一个接一个的 ...

  10. NET中間語言(IL) 图解

    转载地址是:http://msdn.microsoft.com/zh-tw/library/dd229210.aspx 想查看IL指令,请看中英文对照表: CN-http://www.cnblogs. ...