数据结构--字典

998 阅读3分钟

什么是字典

字典:字典存储的是键值对,主要的特征是一一对应,字典中的 key 是不能重复且无序的,value 可以重复。

ES6 中的 Map 就是一个字典结构。

字典常用的方法

  • has(key) 判断字典中是否存在这个 key
  • set(key, value) 在字典中添加键值对
  • remove(key) 从字典中删除 key
  • get(key) 获取指定 key 的 value 如果没有返回 undefined
  • keys() 获取所有的 keys
  • values() 获取所有的 values
  • size() 获取字典的键值对的个数
  • clear() 清除字典的所有数据

ES6 实现字典结构

  • 字典结构的封装
/**
 * 字典数据结构
 * 特点:
 *  1. 字典主要存储的是键值对,主要的特点就是对值的一一对应
 *  2. 字典的key是不能重复的并且是无序的,但是value可以有重复的
 *
 * @class Map_
 */
class Map_ {
  constructor() {
    this.map = {};
  }
}

  • has(key) 方法的实现
  // has(key) 判断字典中是否存在这个key
  has(key) {
    return this.map.hasOwnProperty(key);
  }
  • set(key, value) 方法的实现
  // set(key, value) 在字典中添加键值对
  set(key, value) {
    this.map[key] = value;
  }
  • remove(key) 方法的实现
  // remove(key) 从字典中删除key
  remove(key) {
    if (!this.has(key)) return false;
    delete this.map[key];
  }
  • get(key) 方法的实现
 // get(key) 获取指定key的value 如果没有返回undefined
  get(key) {
    return this.has(key) ? this.map[key] : undefined;
  }
  • keys() 方法的实现
  // keys() 获取所有的keys
  keys() {
    return Object.keys(this.map);
  }
  • values() 方法的实现
  // values() 获取所有的values
  values() {
    return Object.values(this.map);
  }
  • size() 方法的实现
  // size() 获取字典的键值对的个数
  size() {
    return this.keys().length;
  }
  • clear() 方法的实现
  // clear() 清除字典的所有数据
  clear() {
    this.map = {};
  }

字典结构的总体代码

/**
 * 字典数据结构
 * 特点:
 *  1. 字典主要存储的是键值对,主要的特点就是对值的一一对应
 *  2. 字典的key是不能重复的并且是无序的,但是value可以有重复的
 *
 * @class Map_
 */
class Map_ {
  constructor() {
    this.map = {};
  }

  // has(key) 判断字典中是否存在这个key
  has(key) {
    return this.map.hasOwnProperty(key);
  }

  // set(key, value) 在字典中添加键值对
  set(key, value) {
    this.map[key] = value;
  }

  // remove(key) 从字典中删除key
  remove(key) {
    if (!this.has(key)) return false;
    delete this.map[key];
  }

  // get(key) 获取指定key的value 如果没有返回undefined
  get(key) {
    return this.has(key) ? this.map[key] : undefined;
  }

  // keys() 获取所有的keys
  keys() {
    return Object.keys(this.map);
  }

  // values() 获取所有的values
  values() {
    return Object.values(this.map);
  }

  // size() 获取字典的键值对的个数
  size() {
    return this.keys().length;
  }

  // clear() 清除字典的所有数据
  clear() {
    this.map = {};
  }
}