集合數組的實現

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> // 集合 // 集合結構 // 哈希表 // 集合通常是一組無序的不能重複的元素構成,和數學中的集合名詞比較相似,但是數學中的集合範圍更大一些,也允許集合中的元素重複 // 在計算機中,集合通常表示的結構中元素是不允許重複的 // 把集合看成是特殊的數組 // 特殊之處在於裏面的元素沒有順序,也不能重複 // 沒有順序意味着不能通過下標值進行訪問,不能重複意味着相同的對象在集合中只會存在一份 // 封裝集合類 // 封裝集合的構造函數 function Set(){ // 使用一個對象來保存集合的元素 // 屬性 this.items = {} //集合的操作方法 // add方法 Set.prototype.add = function(value){ //判斷當前集合中是否已經包含了該元素 if(this.has(value)){ return false } // 將元素添加到集合中 this.items[value] = value return true } // has方法 Set.prototype.has = function(value){ return this.items.hasOwnProperty(value) } // remove方法 Set.prototype.remove = function(value){ if(!this.has(value)){ return false } delete this.items[value] return true } Set.prototype.clear = function(){ this.items = {} } // size方法 Set.prototype.size = function(){ return Object.keys(this.items).length } // 獲取集合中所有的值 Set.prototype.values = function(){ return Object.keys(this.items) } // 集合間的操作 // 並集 Set.prototype.union = function(otherSet){ // this集合和Other集合的合併 var unionSet = new Set() // 將A集合中所有的元素添加到新集合中 var values = this.values() for(var i=0;i<values.length;i++){ unionSet.add(values[i]) } //取出B集合中的元素,判斷是否需要加到新集合 values = otherSet.values() for(var i=0;i<values.length;i++){ unionSet.add(values[i]) } return unionSet } // 交集 Set.prototype.intersection = function(otherSet){ // this集合A // otherSet集合B var intersectionSet = new Set() // 從A中取出一個個元素 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 } // 差集 Set.prototype.difference = function(otherSet){ // this集合A // otherSet 集合B // 1.創建新的集合 var differenceSet = new Set() 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 } // 子集 Set.prototype.subset = function(otherSet){ //this 集合A // otherSet集合B var values = this.values() for(var i=0;i<values.length;i++){ var item = values[i] if(!otherSet.has(item)){ return false } } return true } } // 測試set類 // var set = new Set() // alert(set.add('abc')) // alert(set.add('cbv')) // alert(set.values()) // alert(set.remove('abc')) // alert(set.remove('abc')) // alert(set.values()) // alert(set.has('cbv')) // alert(set.size()) // set.clear() // alert(set.size()) // 集合間操作 // 集合間通常有如下操作: // 並集:對於給定的兩個集合,返回一個包含兩個集合中所有元素的新集合 // 交集:對於給定的兩個集合,返回一個包含兩個集合中共有元素的新集合 // 差集:對於給定的兩個集合,返回一個包含所有存在於第一個集合且不存在於第二個集合的元素的新集合 // 子集:驗證一個給定集合是否是另一個集合的子集 // 集合中並集的實現 // 1.創建兩個集合,並且添加元素 var setA = new Set() setA.add('abc') setA.add('ccc') var setB = new Set() setB.add('ccc') setB.add('aaa') unionSet = setA.union(setB) alert(unionSet.values()) // 2.求兩個集合的交集 var intersectionSet = setA.intersection(setB) alert(intersectionSet.values()) // 3.差集 var differenceSet = setA.difference(setB) alert(differenceSet.values()) // 4.子集 alert(setA.subset(setB)) </script> </body> </html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章