Swift3-09 集合

将一些元素放在一起,它们是无序的, 跟数组的不同是,数组是一个有序的列表,而集合是一个有序的数据集
为什么需要集合,因为集合是无序的,所以,在做一些查找和判重的时候,效率会有差别。集合会有一些,比数组使用起来方便很多。 集合中的每一个元素都是唯一的

基本方法

//集合的初始化
var arr = ["x","y"] //如果不显式的声明,则默认是数组
var setA:Set = ["x","y"]  //必须显式声明才行

var emptySet1:Set<String> = []
var emptySet2 = Set<Int>()

var setB = Set(["a","b","c","c"]) //将一个数组转换成集合 


setA.count
setA.isEmpty
setA.first //随机的取出一个元素

setA.contains("a") //判断是否有这个元素
//遍历    
for str in setA{
    print(str)
}

var str = setA.joined(separator: "d")

//比较
setA == setB
setA.elementsEqual(setB)

集合的操作

var setA:Set = ["x","y"]  
//插入
setA.insert("D") //返回一个元组
//更新
setA.update(with: "A") //若已存在元素,则返回改元素,若没有,则返回nil
//删除
setA.remove("a") //返回一个 bool 若是 true 则表示删除成功,返回 false 则表示之前没有这个元素
setA.removeAll() 

并集: union (不改变调用者的集合), formUnion (改变调用者的集合) 两个集合中的所有元素集合

var setA:Set = ["x","y"]
var setB = Set(["a","b","c"]) //将一根数组转换成集合

var setC =  setA.union(setB)  //setC 有 setA和 setB 所有元素,但是setA 不变
setA.union(["a"])

setA
setA.formUnion(setB) //setA 被改变
setA

交集: intersect(不改变调用者的集合), formIntersection (改变调用者的集合) 两个集合的公共部分

setA.intersection(setB)
setA

setA.formIntersection(setB)
setA

补集(差集): 做减法 subtracting (不改变调用者的集合) subtract (改变调用者的集合) 调用者不包含在被调用者中的部分

setA.subtracting(setB)  //setA 独有的,而 setB 没有的元素 不改变 setA 值
setA

setA.subtract(setB) //setA 独有的,而 setB 没有的元素 改变 setA 值
setA

去重: symmetricDifference(不改变调用者的集合), formSymmetricDifference (改变调用者的集合), 去除两个集合中相同的部分。

setA.symmetricDifference(setB)
setA
setA.formSymmetricDifference(setB)
setA

子集: isSbuset 子集, isStrictSubset 真子集 判断是否是另外一个集合的子集

setA.isSubset(of: setB)
setA.isStrictSubset(of: setB)

超集: isSuperset超集 , isStrictSuperset 真超集

setA.isSuperset(of: setB)
setA.isStrictSuperset(of: setB)

相离: isDisjoint 没有重叠的元素

setA.isDisjoint(with: setB)