免费开源的iOS开发学习平台

Swift: 5.2 集合类型-集合

集合其实就是一个哈希表,它跟数组的区别在于集合不是连续的,集合里面的值具有唯一性。集合常用在经常性的插入、删除和查找元素的情况下。

  • 集合的常见操作跟数组的一致,不过集合类型是Set<Element>,如果类型可以推断出来,同样可以简写成Set。集合的初始化也可以用数组的字面量的方式进行。同样的,集合通过insert(_:)函数插入值,通过remove(_:)函数来删除值,不过如果删除的值不在集合中,返回值可能为nil。也可以通过removeAll()函数来删除集合中所有的值。集合也是可遍历的,虽然集合是无序的,不过可以用sorted()函数返回集合的排序后的序列。下面程序展示了集合的基本用法。
var fullSet : Set<String> = ["HTML5","App","XWx"]
//也可以简写成如下:
var shortSet : Set = ["HTML5","App","XWx"]

shortSet.insert("Vovo")

//删除一个元素,元素可能为nil
if let removed = shortSet.remove("HTML5"){
    print("\(removed)? 被删掉了")
}else{
    print("不存在这个元素")
}

//查找某个元素
if let contained = shortSet.contains("Woo"){
    print("找到了")
}else{
    print("没找到")
}

//遍历集合
for item in shortSet {
    print("\(item)")
}
//按照首字母进行默认排序后的序列
for item in shortSet.sorted(){
    print("\(item)")
}

运行结果如下图。

  • 可以很方便的对两个同类型的集合执行合并,获取集合的交集、补集以及差集。还可以很方便的通过函数判断两个集合是否是父子集的关系。使用到的函数如下示例中。
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
 //获取并集,并且进行排序
oddDigits.union(evenDigits).sorted()
// 获取交集
oddDigits.intersection(evenDigits).sorted()
// 获取差集,在oaddDigits并且不在singleDigitPrimeNumbers中
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// 获取oddDigits和singleDigitPrimeNumbers的补集,也就是并集-交集
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()

let houseAnimals: Set = ["

 //子集判断
houseAnimals.isSubset(of: farmAnimals)
// 父集判断
farmAnimals.isSuperset(of: houseAnimals)
// 是否没有交集
farmAnimals.isDisjoint(with: cityAnimals)

代码运行结果如下图。

示例代码

https://github.com/99ios/23.5.2