集合是一種包含不一樣元素的數據結構編程
不少編程語言中,集合並非一種數據類型,可是若是你須要建立一個數據結構用來保存一些獨一無二的元素時,集合就變得頗有用
bash
集合的成員是無序的數據結構
集合中不容許相同成員存在編程語言
集合(Set)是由一組無序但彼此之間又有必定關係性的成員構成,集合中的元素稱爲成員
ui
不包含任何成員的集合稱爲空集,包含一切可能成員的集合稱爲全集
this
若是兩個集合裏的成員都徹底相同,則稱兩個集合相等
spa
若是一個集合全部成員都包含於另外一個集合,則前一集合稱爲後一集合的一個子集code
/**
* 一個簡單的集合
* @constructor
*/
function Set() {
this.dataStore = []; // 數據存儲
this.add = add; // 添加成員
this.remove = remove; // 刪除成員
this.show = show; // 顯示當前集合
this.size = size; // 集合元素個數
this.union = union; // 集合求並集
this.intersect = intersect; // 集合求交集
this.subset = subset; // 判斷一個集合是不是另外一集合的子集
this.difference = difference; // 集合求補集
this.contains = contains; // 判斷某成員是否屬於該集合
}
//添加成員
function add(data) {
if (this.dataStore.indexOf(data) < 0) {
this.dataStore.push(data)
} else {
return false
}
}
//刪除成員
function remove(data) {
var pos = this.dataStore.indexOf(data);
if (pos > -1) {
this.dataStore.splice(pos, 1)
} else {
return false
}
}
// 顯示當前集合
function show() {
return this.dataStore
}
// 顯示集合個數
function size() {
return this.dataStore.length
}
// 集合求並集
function union(set) {
var tempSet = new Set()
for (var i = 0; i < this.dataStore.length; i++) {
tempSet.add(this.dataStore[i])
}
for (var i = 0; i < set.dataStore.length; i++) {
if (!tempSet.contains(set.dataStore[i])) {
tempSet.add(set.dataStore[i])
}
}
return tempSet
}
// 集合求交集
function intersect(set) {
var tempSet = new Set()
for (var i = 0; i < this.dataStore.length; i++) {
if (set.contains(this.dataStore[i])) {
tempSet.add(this.dataStore[i])
}
}
return tempSet
}
//集合求補集
function difference(set) {
var tempSet = new Set()
for (var i = 0; i < this.dataStore.length; i++) {
if (!set.contains(this.dataStore[i])) {
tempSet.add(this.dataStore[i])
}
}
return tempSet
}
// 集合求子集
function subset(set) {
if(set.size() > this.size()) return false
for(var i = 0; i < set.dataStore.length; i++) {
if(!this.contains(set.dataStore[i])) {
return false
}
}
return true
}
// 判斷某成員是否屬於該集合
function contains(data) {
return this.dataStore.indexOf(data) > -1 ? true : false
}
var set = new Set()
set.add('1')
set.add('1')
set.add('13')
set.add('14')
set.add('15')
set.remove('15')
console.log(set.show())
var set2 = new Set()
set2.add('1')
set2.add('21')
set2.add('213')
set2.add('14')
console.log(set2.show())
console.log('=====並集====')
console.log(set.union(set2).show())
console.log('=====交集====')
console.log(set.intersect(set2).show())
console.log('=====補集====')
console.log(set.difference(set2).show())
var set3 = new Set()
set3.add('1')
set3.add('13')
set3.add('14')
console.log('=====set3是set子集====')
console.log(set.subset(set3))
console.log('=====set2是set子集====')
console.log(set.subset(set2))複製代碼