5.集合类型

2021-07-13  本文已影响0人  LucXion

Swift 语言提供数组(Array)、集合(Set)和字典(Dictionary)三种基本的集合类型用来存储集合数据。数组是有序数据的集。集合是无序无重复数据的集。字典是无序的键值对的集。

数组Array

var arr = [0,1,2,3,4,5]
arr[3...5] = [9,9,9]
// [0,1,2,9,9,9]
arr.insert(8, at: 1)
// [0,8,1,2,9,9,9]
for (index,item) in arr.enumerated() {
    print("index = \(index),item = \(item)")
}

集合Set :集合内的类型必须可hash化

你可以使用自定义的类型作为集合值的类型或者是字典键的类型,但需要使自定义类型遵循 Swift 标准库中的 Hashable 协议。遵循 Hashable 协议的类型需要提供一个类型为 Int 的可读属性 hashValue。由类型的 hashValue属性返回的值不需要在同一程序的不同执行周期或者不同程序之间保持相同。

因为 Hashable 协议遵循 Equatable 协议,所以遵循该协议的类型也必须提供一个“是否相等”运算符(==)的实现。这个 Equatable 协议要求任何遵循 == 实现的实例间都是一种相等的关系。也就是说,对于 a,b,c 三个值来说,== 的实现必须满足下面三种情况:

  • a == a(自反性)
  • a == b 意味着 b == a(对称性)
  • a == b && b == c 意味着 a == c(传递性)
//var fat : Set<String> = []
var fat : Set = ["a","b","c"]
//fat.insert("d")
if let _ = fat.remove("d") {
    print("fat has d")
}else {
    print("cann't fine d")
}
// 按序遍历 sorted
for item in fat.sorted(by: { (a, b) -> Bool in
    a > b
}) {
    print(item)
}

交集、并集

字典

var dic:[Int:String?] = [1:nil]
dic[2]="2"
dic.updateValue(nil, forKey: 3)//直接通过 字面量赋值 和 updateValue 赋值,如果没有键会自动新建
dic[4] = nil//这是删除键值对的操作,无法通过这个方式赋值
if let oldValue = dic.updateValue("1", forKey: 1) {
    // 是否会走这里不是判断oldValue是否有值,而是判断dic是否存在1这个key
    print(oldValue ?? "")
}
上一篇下一篇

猜你喜欢

热点阅读