Swift学习笔记之---Set集合类型

Set集合类型

Set类型的集合不关注其中元素的顺序,但是其中的元素不可以重复,是一个无序的集合,在进行声明的时候必须指定其类型,或者对其进行赋初值,使得编译器可以自行推断出Set的类型。声明与创建Set集合的示例代码如下:

var set1: Set<Int> = [1, 2, 3, 4]
var set2 = Set(arrayLiteral: 1, 2, 3, 4)

由于Set并不关注于其中元素的顺序,但Set类型依然是 支持通过下标来获取其中的元素,示例如下:

// 获取集合首个元素(顺序不定)
set1[set1.startIndex]
// 进行下标的移动
// 获取某个下标后一个元素
set1[set1.index(after: set1.startIndex)]
// 获取某个下标后几位元素
set1[set1.index(after: set1.startIndex, offsetBy: 3)]

Set的下标操作只能向后移动,不能向前移动。

  1. 获取集合实例中的信息

    // 获取元素个数
    set1.count
    // 判断集合是否为空集合
    if set1.isEmpty {
      print("集合为空")
    }
    // 判断集合中是否包含某个元素
    if set1.contains(1) {
      print("集合中包含")
    }
    // 获取集合中的最大值
    set1.max()
    // 获取集合中的最小值
    set1.min()
    
  2. 编辑集合(增、删、查、改)

    示例如下:

    // 向集合中插入一个元素
    set1.insert(5) 
    // 移除集合中某个的元素
    set1.remove(1)
    // 移除集合中的第一个元素
    array.removeFirst()
    // 移除集合中某个位置的元素
    array.remove(at: set1.index(of: 3)!) 
    // 移除集合中所有元素
    array.removeAll()
    

    在使用remove(at:)方法删除集合某个位置的元素时,需要传入一个集合元素的下标值,通过Set实例的index(of:)方法可以获取具体某个元素的下标值,需要注意,这个方法将会返回一个Optional类型的可选值,因为要寻找的元素可能不存在。

  3. Set运算

    在这里插入图片描述

    Set集合支持4类数学运算,分别为intersection(交集)运算、symmetricDifferenc(e交集的补集)运算、union(并集)运算和subtracting(补集)运算。intersection运算的结果为两个集合的交集,symmetricDifference运算的结果为a集合与b集合的并集除去a集合与b集合的交集,union运算的结果为两个集合的并集,subtracting运算的结果为a集合除去a集合与b集合的交集。上述4种运算的示例代码如下:

    var set3: Set<Int> = [1, 2, 3, 4]
    var set4: Set<Int> = [1, 2, 5, 6]
    // 返回交集 {2, 1}
    var setInter =  set3.intersection(set4)
    // 返回交集的补集 {3, 6, 5, 4}
    var setEx = set3.symmetricDifference(set4)
    // 返回并集 {3, 6, 1, 2, 4, 5}
    var setUni = set3.union(set4)
    // 返回第二个集合的补集 {3, 4}
    var setSub = set3.subtracting(set4)
    

    使用比较运算符"=="可以比较两个set集合是否相等,当两个集合中的所有元素都相等时,两个集合才相等。

    Set中提供了一些方法用于判断集合间的关系,示例代码如下:

    var set5: Set = [1, 2]
    var set6: Set = [2, 3]
    var set7: Set = [1, 2, 3]
    var set8: Set = [1, 2, 3]
    // 判断是否是某个集合的子集,set5是set7的子集,返回true
    set5.isSubSet(of: set7)
    // 判断是否是某个集合的超集,set7是set5的超集,返回true
    set7.isSuperSet(of: set5)
    // 判断是否是某个集合的真子集,set5是set7的真子集,返回true
    set5.isStrictSubset(of: set7)
    // 判断是否是某个集合的真超集,set7是set8的真超集,返回false
    set7.isStrictSuperset(of: set8)
    
  4. 遍历集合

    Set也可以通过for-in方式来获取集合中的所有数据,可以通过3中方法来进行遍历:遍历元素、遍历集合的枚举与遍历集合下标。集合枚举会返回一个元组,元组中将集合下标和其对应的值异同返回,示例代码如下:

    // for-in
    for item in set7 {
      print(item)
    }
    // 遍历集合的枚举
    for item in set7.enumerated() {
      print(item)
    }
    // 遍历集合的下标
    for index in set7.indices {
      print(set7[index])
    }
    

    在遍历的时候,可以对其进行排序后再遍历

    // 从大到小排序遍历集合
    for item in set7.sorted(by: >) {
      print(item)
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值