字典的实现

// 字典类
function Dictionary () {
this.add = add;
this.dataStore = new Array();
this.find = find;
this.remove = remove;
this.showAll = showAll;
this.count = count;
this.clear = clear;
}
function add (key, value) {
this.dataStore[key] = value;
}
function find (key) {
return this.dataStore[key];
}
function remove (key) {
delete this.dataStore[key];
}
function showAll () {
let datakeys = Array.prototype.slice.call(Object.keys(this.dataStore));
for (let key in datakeys.sort()) {
console.log(`${datakeys[key]} -> ${this.dataStore[datakeys[key]]}`);
}
}
// 计数
function count () {
let n = 0;
for (let key in Object.keys(this.dataStore)) {
++n;
}
return n;
}
// 清空
function clear () {
Object.keys(this.dataStore).forEach((key) => {
delete this.dataStore[key];
}, this);
}

练习

使用Dictionary类写一个程序,该程序用来存储一段文本中各个单词出现的次数。该程序显示每个单词出现的次数,但每个单词只显示一次。比如下面一段话“the brown fox jumped over the blue fox”,程序的输出应为:

  • the: 2
  • brown: 1
  • fox: 2
  • jumped: 1
  • over: 1
  • blue: 1
function showWordCount (word) {
let d = new Dictionary();
let words = word.split(' ');
for (let i = 0, max = words.length; i < max; ++i) {
// 首次出现
if (typeof d.find(words[i]) === 'undefined') {
d.add(words[i], 1);
} else {
++d.dataStore[words[i]];
}
}
Object.keys(d.dataStore).forEach((key) => {
console.log(`${key}: ${d.find(key)}`);
}, this);
}
// 示例
showWordCount('the brown fox jumped over the blue fox');

JavaScript数据结构与算法-字典练习

JavaScript数据结构与算法-字典练习的更多相关文章

  1. 为什么我要放弃javaScript数据结构与算法(第七章)—— 字典和散列表

    本章学习使用字典和散列表来存储唯一值(不重复的值)的数据结构. 集合.字典和散列表可以存储不重复的值.在集合中,我们感兴趣的是每个值本身,并把它作为主要元素.而字典和散列表中都是用 [键,值]的形式来 ...

  2. JavaScript数据结构——集合、字典和散列表

    集合.字典和散列表都可以存储不重复的值. 在集合中,我们感兴趣的是每个值本身,并把它当作主要元素.在字典和散列表中,我们用 [键,值] 的形式来存储数据. 集合(Set 类):[值,值]对,是一组由无 ...

  3. 为什么我要放弃javaScript数据结构与算法(第九章)—— 图

    本章中,将学习另外一种非线性数据结构--图.这是学习的最后一种数据结构,后面将学习排序和搜索算法. 第九章 图 图的相关术语 图是网络结构的抽象模型.图是一组由边连接的节点(或顶点).学习图是重要的, ...

  4. 为什么我要放弃javaScript数据结构与算法(第六章)—— 集合

    前面已经学习了数组(列表).栈.队列和链表等顺序数据结构.这一章,我们要学习集合,这是一种不允许值重复的顺序数据结构. 本章可以学习到,如何添加和移除值,如何搜索值是否存在,也可以学习如何进行并集.交 ...

  5. JavaScript数据结构与算法-散列练习

    散列的实现 // 散列类 - 线性探测法 function HashTable () { this.table = new Array(137); this.values = []; this.sim ...

  6. javascript数据结构与算法--高级排序算法

    javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...

  7. javascript数据结构与算法-- 二叉树

    javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构.树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存 ...

  8. javascript数据结构与算法--散列

    一:javascript数据结构与算法--散列  一:什么是哈希表? 哈希表也叫散列表,是根据关键码值(key,value)而直接进行访问的数据结构,它是通过键码值映射到表中一个位置来访问记录的,散列 ...

  9. javascript数据结构与算法---队列

    javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...

随机推荐

  1. android开发全然退出activity

    我们退出Activity能够调用:finish(),system(0),可是这些都仅仅是单单退出单个Activity 也有人会说,直接把进程杀死,这些做法都不是非常可取.事实上我们翻看api能够发现. ...

  2. 【MyBatis学习15】MyBatis的逆向工程生成代码

    1. 什么是逆向工程 mybatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需 ...

  3. CentOS7下利用init.d启动脚本实现tomcat开机自启动

    在之前的博文中已经对CentOS7下通过tomcat进行WEB系统的发布进行了介绍,今天将利用init.d启动脚本,将服务脚本加入到开机启动服务队列,实现tomcat服务的开机启动. 1. 环境准备 ...

  4. YUYV格式到RGB格式的转换

    为什么YUYV格式要转到RGB格式,视频的显示调用的多数API都是基于RGB格式,所以需要进行格式的转换. YUYV格式如下: Y0U0Y1V0 Y2U1Y3V1.......... 说明:一个Y代表 ...

  5. SQL——使用游标进行遍历

    前两天一个同事大叔问了这样一个问题,他要对表做个类似foreach的效果,问我怎么搞.我想了想,就拿游标回答他,当时事实上也没用过数据库中的游标,可是曾经用过ADO里面的,感觉应该几乎相同. 今天闲下 ...

  6. 使用httpClient发送get\post请求

    maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&g ...

  7. FreeBSD这就是你的速度???

    想一心一意的用一款UNIX操作系统,真不容易,FreeBSD你为啥这么坑? 用pkg安装软件,国内没有相应的源,只好从官网上下,欲哭无泪!有点怀恋CentOS的yum了,163的源,那速度杠杠滴! 先 ...

  8. c++标准库之容器

    C++最原始的容器之一是数组.数组的特点有: 1.大小固定 2.单独存在的数组建立在栈上,作为对象成员存在的数组建立在堆上还是栈上则要看作为宿主对象是被建立在堆上还是栈上.栈空间是有限的,所以如果数组 ...

  9. POI Excel 冷冻线

    冷冻线 Sheet.createFreezePane data bar and  color scale SheetConditionalFormatting scf = sheet.getSheet ...

  10. 那些可爱的 Linux 命令

    环境 root@15b883:~# uname -a ##需要是Ubuntu环境 Linux 15b883 --generic #- :: UTC x86_64 x86_64 x86_64 GNU/L ...