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

Posted 油醋三椒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
    
    

以上是关于Swift学习笔记之---Set集合类型的主要内容,如果未能解决你的问题,请参考以下文章

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

Swift学习笔记之---Array数组

Swift学习笔记之---Array数组

Swift学习笔记之---Array数组

Swift学习笔记:集合类型

Swift学习笔记 - 教程学习三 集合类型 (Collection Types)