Swift3.0 - 集合 - Set

来源:互联网 发布:山东大学远程网络教育 编辑:程序博客网 时间:2024/05/17 01:10

集合(Sets)

集合(Set)用来存储相同类型并且没有确定顺序的值。当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合而不是数组。

Playground 下载地址:https://pan.baidu.com/s/1kVS7hrD

var sets1 = Set<Character>()sets1.insert("a")sets1 = []//sets1 = ["Rock", "Classical", "Hip hop"] //报错:因为前面已经声明了sets是字符类型的var sets2: Set<String> = ["qwe","asd","zxc"]//应声明为String类型的集合,否则自检为数组,Set类型不能从数组字面量中被单独推断出来,因此Set类型必须显式声明var sets3: Set = ["rty","dfg","vbn"]//Set类型不能从数组字面量中被单独推断出来,因此Set类型必须显式声明,但是可以不声明具体类型,具体类型可以自检sets2.count//长度sets2.isEmpty//是否为空sets3.contains("dfg")//是否包含该值

增删改查

sets3.insert("poi")//增sets3.remove("dfg")//删除该值//这是使用Set的下标,但因为Set是无序的,个人觉得使用下标基本没多大意义let indx1 = sets3.index(after: sets3.startIndex)let indx2 = sets3.index(of: "rty")let indx3 = sets3.startIndexlet indx4 = sets3.endIndexsets3//["poi", "vbn", "rty"]sets3.remove(at: indx2!)sets3//["poi", "vbn"]

遍历

for item in sets3 {    print(item)}for (i,item) in sets3.enumerated() {    print("i => \(i)")    print("item => \(item)")}//排序for item in sets2.sorted() {    print("\(item)")}

操作

/* 使用intersect(_:)方法根据两个集合中都包含的值创建的一个新的集合。 使用symmetricDifference(_:)方法根据在一个集合中但不在两个集合中的值创建一个新的集合。 使用union(_:)方法根据两个集合的值创建一个新的集合。 使用subtract(_:)方法根据不在该集合中的值创建一个新的集合。 */let sets10: Set = [1, 2, 4, 6, 8, 7]let sets11: Set = [1, 3, 5, 7, 9]let sets12: Set = [0, 2, 4, 6, 8]let sets13: Set = [2, 3, 5, 7]let sets14: Set = [1, 3, 5, 7, 9]let sets15: Set = [1, 3, 5, 9]sets11.intersection(sets10)// [7, 1]sets11.symmetricDifference(sets12)//[8, 2, 4, 5, 7, 6, 3, 1, 0]sets11.union(sets12) // [8, 2, 9, 4, 5, 7, 6, 3, 1, 0]sets11.subtracting(sets13)// [9, 1]

判断

/* 使用“相等”运算符 ( == )来判断两个集合是否包含有相同的值; 使用 isSubset(of:) 方法来确定一个集合的所有值是被某集合包含; 使用 isSuperset(of:)方法来确定一个集合是否包含某个集合的所有值; 使用 isStrictSubset(of:) 或者 isStrictSuperset(of:)方法来确定这个个集合是否为某一个集合的子集或者超集,但并不相等; 使用 isDisjoint(with:)方法来判断两个集合是否拥有相同的值。 */sets11 == sets15 //falsesets11 == sets14 //truesets14.isSubset(of: sets11)// truesets11.isSubset(of: sets15)// false  15不包含11sets15.isSubset(of: sets11)// truesets15.isSuperset(of: sets11)// falsesets11.isSuperset(of: sets15)// true  11是15的超集sets11.isSuperset(of: sets14)// true  11是14的超集sets11.isStrictSubset(of: sets14)//falsesets11.isStrictSubset(of: sets15)//falsesets15.isStrictSubset(of: sets11)//true  15是11的子集sets11.isStrictSuperset(of: sets14)//false  11是14的超集但是11和14相等sets11.isStrictSuperset(of: sets15)//true 11是15的超集sets15.isStrictSuperset(of: sets11)//falsesets11.isDisjoint(with: sets12)// true  11和12没有相同的值sets11.isDisjoint(with: sets13)// falsesets11.isDisjoint(with: sets14)// falsesets11.isDisjoint(with: sets15)// falsesets15.isDisjoint(with: sets11)// false
0 0
原创粉丝点击