数据结构JavaScript——集合
来源:互联网 发布:淘宝手机店铺装修素材 编辑:程序博客网 时间:2024/06/05 10:11
在数据结构之前,集合首先是个非常重要的数学概念,离散数学的第一课应该都是讲集合吧。。。
在数据结构中,集合是由一组无序且唯一的项组成的。这里对这种数据结构进行了封装,使用对象来存储项(键和值都为该项自身),提供了添加项、删除项等一系列基本的集合操作方法。并在构造器对象上定义了求两集合并集、交集、差集、笛卡尔积、环积的方法,以及判断是否为子集、真子集、同一集合的方法。 关于构造器对象上定义的这些方法,大家可以将它添加至原型对象中并进行相应修改,使得可以自动将调用对象作为方法的第一个参数。 这里还支持链式调用。 各方法功能见代码注释:
//set function Set(){ //私有变量 var items = {}, size = 0; //向集合中添加元素 Object(Set) this.add = function(value){ if(!this.has(value)){ items[value] = value; size++; return this; } throw 'Set.add() false'; return false; }; //从集合中移除元素 Object(Set) this.remove = function(value){ if(this.has(value)){ delete items[value]; size--; return this; } throw 'Set.remove() false'; return false; }; //集合中是否存在该元素 Boolean this.has = function(value){ return items.hasOwnProperty(value); }; //清空集合 true this.clear = function(){ items = {}; size = 0; return true; }; //集合大小 Number this.size = function(){ return size; }; //集合中的元素列表 Object(Array) this.values = function(){ return Object.keys(items); };} //在构造器对象上定义了一系列集合运算方法 可以直接调用 //求交集 Object(Set) Set.intersection = function(set1, set2){ var res = new Set(), temp = set1.values(); for(var i in temp){ if(set2.has(temp[i])) res.add(temp[i]); } return res; } //求并集 Object(Set) Set.union = function(set1, set2){ var res = new Set(), temp = set1.values(), temp2 = set2.values(); for(var i in temp) res.add(temp[i]); for(var j in temp2) res.add(temp2[j]); return res; } //求差集set1-set2 Object(Set) Set.difference = function(set1, set2){ var res = new Set(), temp = set1.values(); for(var i in temp) if(!set2.has(temp[i])) res.add[temp[i]]; return res; } //求笛卡儿积 这里用数组表示序偶 Object(Set) Set.cartesianProduct = function(set1,set2){ var res = new Set(), temp1 = set1.values(), temp2 = set2.values(); for(var i = 0; i < temp1.length;i++) for(var j = 0;j < temp2.length;j++) res.add([temp1[i],temp2[j]]); return res; } //求对称差 Object(Set) Set.symmetricDifference = function(set1, set2){ return Set.union(Set.difference(set1, set2),Set.difference(set2,set1)); } //set1是否是set2的子集 Boolean Set.isSubset = function(set1, set2){ // if set1 is set2's subset, return true var temp = set1.values(); for(var i in temp) if(!set2.has(temp[i])) return false; return true; } //set1是否是set2的真子集 Boolean Set.isProperSubset = function(set1, set2){ // if set1 is set2's proper subset, return true if(set1.size() >= set2.size()) return false; return Set.isSubset(set1, set2); //another //return Set.isSubset(set1, set2) && !Set.equality(set1, set2); } //两集合是否相等 Set.equality = function(set1, set2){ return Set.isSubset(set1, set2) && Set.isSubset(set2, set1); }
其实在写面向对象系列后,有点小强迫症,特别想把方法都写进原型对象里。但是这里因为要通过闭包实现私有变量,必须将方法放进构造函数中。 如果非要把方法写在原型对象里的话,构造函数里也得定义对私有变量的访问接口方法,那感觉就真有点画蛇添足了。
阅读全文
0 0
- 数据结构JavaScript——集合
- 学习javascript数据结构(三)——集合
- 数据结构——集合(JavaScript)
- 学习JavaScript数据结构与算法(五)——集合
- JavaScript数据结构之集合
- JavaScript数据结构-集合
- 数据结构——集合
- 数据结构与算法JavaScript - 集合
- 数据结构——集合合并
- Redis数据结构——集合
- javascript数据结构6-字典 散列 集合
- JavaScript数据结构与算法之集合(Set)
- 数据结构JavaScript——栈
- 数据结构JavaScript——队列
- 集合架构——简单数据结构
- python基础知识——内置数据结构(集合)
- 数据结构实践——集合合并
- 简单说一说数据结构——集合
- JobScheduler5.0源码分析
- Spring学习,@Resource,@Autowried,@Inject
- android实现拍照并转换为base64
- Feign
- PAT 1017. A除以B
- 数据结构JavaScript——集合
- 理解赤池信息量(AIC),贝叶斯信息量(BIC)
- Rhyme/Struts2源码解析以及拦截器原理模拟
- 蓝桥杯 算法提高 质因数
- 在线资料学习记录
- 171216—几种经典加密方法。
- python---post请求数据包,正常模拟登录,图片验证码未自动化,phtesseract
- iOS开发网络篇 一一 网络的基本概念
- JAVA学习笔记21——SpingMVC框架第一章