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 ?? "")
}
网友评论