zoukankan      html  css  js  c++  java
  • 【javascript】数据结构-集合

    <!DOCTYPE html>
    <html>
    <head>
    	<title>集合</title>
    	<meta charset="utf-8">
    	<script type="text/javascript">
    		function Set(){
    
    			let items = {};
    
    			// add:添加一个新的项
    			this.add = function(value){
    				if(!this.has(value)){
    					// 添加一个值的时候,把它同时作为键和值保存,有利于查找这个值
    					items[value] = value;
    					return true;
    				}
    				return false;
    			};
    
    			// delete:删除值
    			this.delete = function(value){
    				if(this.has(value)){
    					delete items[value];
    					return true;
    				}
    				return false;
    			};
    
    			// has:如果值在集合中返回true,否则返回false
    			this.has = function(value){
    				return items.hasOwnProperty(value);
    			};
    
    			// clear:移除集合中的所有项
    			this.clear = function(){
    				items = {};
    			};
    
    			// size:返回集合中所包含的元素数量,与数组的length属性类似
    			this.size = function(){
    				return Object.keys(items).length;
    			};
    
    			// sizeLegacy:跨浏览器兼容返回集合元素数量
    			this.sizeLegacy = function(){
    				let count = 0;
    				for(let key in items){
    					if(items.hasOwnPrototype(key)){
    						++count;
    					}
    				}
    				return count;
    			};
    
    			// values:返回一个包含集合中所有数据的数组
    			this.values = function(){
    				let values = [];
    				for(let i=0, keys = Object.keys(items); i<keys.length; i++){
    					values.push(items[keys[i]]);
    				}
    				return values;
    			};
    
    			// valuesLegacy:跨浏览器兼容
    			this.valuesLegacy = function(){
    				let values = [];
    				for(let key in items){
    					if(items.hasOwnPrototype(key)){
    						values.push(items[key]);
    					}
    				}
    				return values;
    			};
    
    			// getItems
    			this.getItems = function(){
    				return items;
    			};
    
    			// union:并集
    			this.union = function(otherSet){
    				let unionSet = new Set();
    
    				let values = this.values();
    				for(let i=0; i<values.length; i++){
    					unionSet.add(values[i]);
    				}
    
    				values = otherSet.values();
    				for(let i=0; i<values.length; i++){
    					unionSet.add(values[i]);
    				}
    				return unionSet;
    			};
    
    			// intersection:交集
    			this.intersection = function(otherSet){
    				let intersectionSet = new Set();
    
    				let values = this.values();
    				for(let i=0; i<values.length; i++){
    					if(otherSet.has(values[i])){
    						intersectionSet.add(values[i]);
    					}
    				}
    				return intersectionSet;
    			};
    
    			//difference:差集
    			this.difference = function(otherSet){
    				let differenceSet = new Set();
    				let values = this.values();
    				for(let i=0; i<values.length; i++){
    					if(!otherSet.has(values[i])){
    						differenceSet.add(values[i]);
    					}
    				}
    				return differenceSet;
    			};
    
    			// subset:子集
    			this.subset = function(otherSet){
    				if(this.size() > otherSet.size()){
    					return false;
    				}
    				else{
    					let values = this.values();
    					for(let i=0; i<values.length; i++){
    						if(!otherSet.has(values[i])){
    							return false;
    						}
    					}
    				}
    				return true;
    			}
    
    		}
    
    		// Set的使用
    		var set1 = new Set();
    		set1.add(1);
    		set1.add(2);
    		set1.add(3);
    
    		var set2 = new Set();
    		set2.add(1);
    		set2.add(2);
    		set2.add(3);
    		set2.add(4);
    		set2.add(5);
    
    		var set3 = new Set();
    		set3.add("a");
    		set3.add("b");
    		set3.add("c");
    		set3.add("d");
    
    		// 打印集合大小
    		console.log(set1.size());				//3
    		console.log(set2.size());				//5
    		console.log(set3.size());				//4
    
    		//打印集合元素的数组形式
    		console.log(set1.values());				//[1,2,3]
    		console.log(set2.values());				//[1,2,3,4,5]
    		console.log(set3.values());				//["a", "b", "c", "d"]
    
    		 // 求set1和set2的并集
    		 let set12 = set1.union(set2);
    		 console.log(set12.values());			//[1,2,3,4,5]
    		 
    		 // 求set1和set2的交集
    		 let _set12  = set1.intersection(set2);
    		 console.log(_set12.values());			//[1,2,3]
    
    		 // 求set1和set2的差集
    		 let set2_1 = set2.difference(set1);
    		 console.log(set2_1.values());			//[4,5]
    		 
    		 // 判断set1是否为set2的子集
    		 console.log(set1.subset(set2));		//true
    
    		 // 判断set3是否为set2的子集
    		 console.log(set3.subset(set2));		//false
    	</script>
    </head>
    <body>
    
    </body>
    </html>
    

      

  • 相关阅读:
    Java实现 LeetCode 343 整数拆分(动态规划入门经典)
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 338 比特位计数
    H264(NAL简介与I帧判断)
    分享一段H264视频和AAC音频的RTP封包代码
  • 原文地址:https://www.cnblogs.com/dragonir/p/7710762.html
Copyright © 2011-2022 走看看