集合与字典

字典:一一对一,键值对的储存方式。key:value,key不可以重复且无序,value可重复

Dictionary/dict/HashMap&TreeMap

集合:无序,不能重复的元素构成;常见实现方式 哈希表

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>set</title>
	</head>
	<body>
		<script>
			//封装集合
			function Set(){
				//属性
				this.items = {}//js中的Object对象
				//常见方法
				Set.prototype.add = function(value){
					//判断当前集合中是否包含该元素
					if(this.has(value)){
						return false
					}
					//将元素添加到集合中
					this.items[value] = value//键和值都是value
					return true
				}
				Set.prototype.has = function(value){
					return this.items.hasOwnProperty(value)
				}
				Set.prototype.remove = function(value){
					//1.判断该集合中是否包含该元素
					if(!this.has(value)){
						return false
					}
					//2.将元素从属性中删除
					delete this.items[value]
					return true
				}
				Set.prototype.clear = function(){
					this.items = {}
				}
				Set.prototype.size = function(){
					return Object.keys(this.items).length
				}
				//获得集合中所有的值
				Set.prototype.values = function(){
					return Object.keys(this.items)
				}
			}
			var set = new Set()
			set.add('123')
			set.add('456')
			console.log(set.add('456'))
			console.log(set.add('abc'))
			alert(set.values())
			console.log(set.values())
			console.log(set.remove('456'))
			console.log(set.remove('456'))
			alert(set.values())
			console.log(set.has('123'))
			console.log(set.has('456'))
			alert(set.size())
			set.clear()
			alert(set.size())
		</script>
	</body>
</html>

//集合间的操作
				//并集
				Set.prototype.union = function(otherSet){
					//this:集合对象A
					//otherSet:集合对象B
					//1.创建一个新的集合
					var unionSet = new Set()
					
					//2.将A集合中所有元素添加到集合中
					var values = this.values()
					for(var i = 0; i<values.length;i++){
						unionSet.add(values[i])
					}
					//3.取出B集合中元素,判断是否需要加到新集合中
					values = otherSet.values()
					for(var i = 0;i<values.length;i++){
						unionSet.add(values[i])
					}
					return unionSet
				}


/*******************************************/
var setA = new Set()
			setA.add(123)
			setA.add(456)
			setA.add('abc')
			setA.add('def')
			var setB = new Set()
			setB.add('aaa')
			setB.add('bbb')
			setB.add('ddd')
			setB.add('abc')
			var unionSet = setA.union(setB)
			console.log(unionSet.values())
			alert(unionSet.values())
//交集
Set.prototype.intersection = function(otherSet){
	//this:集合A
	//otherSet:集合B
	//1.创建新的集合
	var intersectionSet = new Set()
	
	//2.从A中取出一个元素,判断是否同时存在于集合B中,若是存在就放入新集合中
	var values = this.values()
	for(var i=0;i<values.length;i++){
		var item= values[i]
		if(otherSet.has(item)){
			intersectionSet.add(item)
		}
	}
	return intersectionSet
}

/***********************************************************************/
var setA = new Set()
			setA.add(123)
			setA.add('aaa')
			setA.add('abc')
			setA.add('def')
			var setB = new Set()
			setB.add('aaa')
			setB.add('bbb')
			setB.add('ddd')
			setB.add('abc')
			var intersectionSet = setA.intersection(setB)
			console.log(intersectionSet.values())
			alert(intersectionSet.values())
//差集
				Set.prototype.difference = function(otherSet){
					//this:集合A
					//otherSet:集合B
					//1.创建新的集合
					var differenceSet = new Set()
					
					//2.从A中取出一个元素,判断是否同时存在于集合B中,若是不存在就放入新集合中
					var values = this.values()
					for(var i=0;i<values.length;i++){
						var item= values[i]
						if(!otherSet.has(item)){
							differenceSet.add(item)
						}
					}
					return differenceSet
				}
/*********************************************************************************/
var setA = new Set()
			setA.add(123)
			setA.add('aaa')
			setA.add('abc')
			setA.add('def')
			var setB = new Set()
			setB.add('aaa')
			setB.add('bbb')
			setB.add('ddd')
			setB.add('abc')
			var differenceSet = setA.difference(setB)
			console.log(differenceSet.values())
			alert(differenceSet.values())
//子集
				Set.prototype.subset = function(otherSet){
					//this:集合A
					//otherSet:集合B
					//遍历集合A中元素,若集合A中元素,在集合B中不存在,就返回false
					//若是遍历完了A,依然没有返回false就返回true
					var values = this.values()
					for(var i=0;i<values.length;i++){
						var item = values[i]
						if(!otherSet.has(item)){
							return false
						}
						return true
					}
				}
/***********************************************/
var setA = new Set()
			setA.add(123)
			setA.add('aaa')
			setA.add('abc')
			setA.add('def')
			var setB = new Set()
			setB.add('aaa')
			setB.add('bbb')
			setB.add('ddd')
			setB.add('abc')
			alert(setA.subset(setB))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值