数据结构(四)集合-字典JS实现
特点
集合是一种无序,包含的每个元素都是是唯一的数据结构。生活中常见的字典,哈希表就是集合的一种实现方式,
集合常见的操作:
add(value)
:向集合添加一个新的项;remove(value)
:从集合中移除一个值;has(value)
:如果值在集合中,返回true
,否则返回false
;clear()
:移除集合中的所有项;size()
:返回集合所包含元素的数量,与数组的length
属性相似;values()
:返回一个包含集合中所有值的数组
代码实现
class Set {
constructor() {
this.items = {}
}
add(value) {
if (this.has(value)) return false
this.items[value] = value
}
has(value) {
return this.items.hasOwnProperty(value)
}
remove(value) {
if (!this.has(value)) return false
delete this.items[value]
return true
}
clear() {
this.items = {}
}
size() {
return Object.keys(this.items).length
}
values() {
return Object.keys(this.items)
}
}
集合间常见操作
union(otherSet) {
let newSet = new Set()
let oldSet = this.values()
for (const value of oldSet) {
newSet.add(value)
}
for (const value of otherSet.values()) {
newSet.add(value)
}
return newSet
}
interaction(otherSet) {
let newSet = new Set()
for (const value of otherSet.values()) {
if (this.items.hasOwnProperty(value)) {
newSet.add(value)
}
}
return newSet
}
differ(otherSet) {
let newSet = new Set()
for (const value of this.values()) {
if (!otherSet.items.hasOwnProperty(value)) {
newSet.add(value)
}
}
return newSet
}
isSub(otherSet) {
let newSet = new Set()
for (const value of otherSet.values()) {
if (!this.items.hasOwnProperty(value)) {
return false
}
}
return true
}