数据结构 - 集合

news/2024/7/3 5:53:50

集合

数据结构 - 集合,不重复。

// 集合实现
// ES5
var MySet = function() {
  var items = {};

  // 检查元素是否存在
  this.has = function(value) {
    return items.hasOwnProperty(value);
  };

  // 添加元素
  this.add = function(value) {
    // 集合不重复 - 先检查元素是否存在
    if (!this.has(value)) {
      items[value] = value;
      return value;
    }
    return false;
  };

  // 删除元素
  this.remove = function(value) {
    // 集合不重复 - 先检查元素是否存在
    if (this.has(value)) {
      delete items[value];
      return true;
    }
    return false;
  };

  // 清除集合
  this.clear = function() {
    items = {};
  };

  // 获取集合长度
  this.size = function() {
    // var count = 0;
    // for (var i in items) {
    //   if (items.hasOwnProperty(i)) {
    //     count++;
    //   }
    // }
    // return count;
    return Object.keys(items).length;
  };

  // 获取集合元素
  this.value = function() {
    var values = [];
    for (var i in items) {
      if (items.hasOwnProperty(i)) {
        values.push(items[i]);
      }
    }
    return values;
  };

  // 并集
  this.union = function(oSet) {
    var sSet = new MySet();

    // 获取自己的值
    var arr = this.value();
    for (var i in arr) {
      sSet.add(arr[i]);
    }
    // 操作另一个集合
    var oarr = oSet.value();
    for (var i in oarr) {
      sSet.add(oarr[i]);
    }

    return sSet;
  };

  // 交集
  this.intersection = function(oSet) {
    var sSet = new MySet();

    // 获取自己的值
    var arr = this.value();
    for (var i in arr) {
      if (oSet.has(arr[i])) {
        sSet.add(arr[i]);
      }
    }

    return sSet;
  };

  // 差集
  this.difference = function(oSet) {
    var sSet = new MySet();

    // 获取自己的值
    var arr = this.value();
    for (var i in arr) {
      if (!oSet.has(arr[i])) {
        sSet.add(arr[i]);
      }
    }

    return sSet;
  };

  // 检查items
  this.getItem = function() {
    return items;
  };
};

var A = new MySet();
A.add(1);
A.add(2);
A.add(3);
var B = new MySet();
B.add(2);
B.add(3);
B.add(4);

ES6 - set集合。

// ES6 set
var s = new Set();
s.add(1);
s.add(2);
s.add(3);

// 遍历
// s.forEach(function(value, value2, set) {
//   console.log(value);
//   console.log(value2);
//   console.log(set);
// });

// 迭代器
var interator = s.entries();
interator.next();
interator.next();
interator.next();
interator.next();

// WeakSet
// var w = new WeakSet();
// var obj = {'name': 'Brady'};
// w.add(obj);
// console.log(w);

var A = new Set();
A.add(1);
A.add(2);
A.add(3);
var B = new Set();
B.add(2);
B.add(3);
B.add(4);

// 并集
console.log(new Set([...A, ...B]));
// 交集
console.log(new Set([...A].filter(item => B.has(item))));
// 差集
console.log(new Set([...A].filter(item => !B.has(item))));

http://www.niftyadmin.cn/n/4253828.html

相关文章

libuv定时器的使用

2019独角兽企业重金招聘Python工程师标准>>> 定时器有这么以下几个函数: int uv_timer_init(uv_loop_t *, uv_timer_t *handle); int uv_timer_start(uv_timer_t *handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat); int uv_timer_stop(uv_timer_t *hand…

手工杀掉传奇终结者变种

EXERT.EXE是病毒文件 病毒发作现象及危害: 该病毒是一个可以在WIN9X/NT/2000/XP等操作系统上运行的盗号木马。病毒会强行终止多种杀毒软件的进程,使其不能正常运行。它会频繁检查游戏客户端的窗口,如果窗口存在,就会取得当前鼠标…

STL源代码剖析 容器 stl_vector.h

本文为senlie原创。转载请保留此地址:http://blog.csdn.net/zhengsenlie vector ---------------------------------------------------------------------- 描写叙述: 1.迭代器 vector 维护的是一个连续线性空间。它的迭代器是普通指针。 能满足 Random…

数据结构 - 字典

字典数据结构 - 字典,可重复。 // 字典实现 // ES5 var Dictionary function() {var items {};// 检查键是否存在this.has function(key) {// return items.hasOwnProperty(key);return key in items;};// 添加元素this.set function(key, value) {items[key] …

手工删除update.exe病毒

1.update.exe在启动项里启动,文件位置在把C:/Program Files/Common Files/UPDATE下,包括把update.dat和update.exe,删除 2.在其他系统文件夹下C:/WINDOWS和C:/WINDOWS/SYSTEM32下查找可疑文件,可疑文件是任意生成的...例如up.dll、UPDATE.exe、spted.dll等 ,删除 …

python排序出现的问题以及解决方案

对某个文件夹中的文件重命名的时候,发现有些文件丢失,代码如下: #codinggbk # Findthe every dir, if 01.rm exist in it, then rename it. #!/usr/bin/python Utilitiesof file & directories. import os import re import strin…

直线栅格化(基于 Bresenham 算法)

直线栅格化在计算机图形处理中非常常用&#xff0c;看了看网上的介绍比较常用的就是Bresenham 算法&#xff0c;搜索了下网上的算法&#xff0c;试了试&#xff0c;有的有问题&#xff0c;自己写了一个&#xff0c;测试通过。 #include <stdio.h> #include <stdlib.h&…

反世界杯宣言出炉(转)

面对世界杯的到来,女人们终于坐不住了,所以才有了下面的这些: 克里斯滕简森是一位荷兰女移民&#xff0c;她不久前用英荷双语建立了一个名为“停办世界杯”的网站。该网站首页上用蓝色大字写着&#xff0c;“我们是一个致力于使足球在英国消失的女性组织&#xff0c;我们强烈反…