Swift 有三种主要的集合类,数组,字典,集合
数组:有顺序的多个值的集合
集合:无顺序的多个值的集合
字典:无顺序的键值对
数组,集合,字典都是使用 generic collections实现的,具体的可以看这个
数组
数组声明
[Int] 的是Array < Int > 的缩写。多数情况下建议使用前者
var fullSyntax = Array<Int>()
var shortSyntax = [Int]()
初始化数组
var shoppingList: [String] = ["Eggs","Milk"]
访问数组
shoppingList[0] = "Six eggs"
访问多个元素
shoppingList[4...6] = ["Bananas","Apples"]
插入元素
shoppingList.insert("Maple Syrup",atIndex: 0)
shoppingList.append("Flour")
移除元素
let mapleSyrup = shoppingList.removeAtIndex(0)
历遍数组
for item in shoppingList{
println(item)
}
集合
集合声明
var letters = Set<Character>()
初始化集合
var favoriteGenres: Set<String> = ["Rock","Classical","Hip hop"]
插入集合
favoriteGenres.insert("Jazz")
遍历集合
for genre in favoriteGenres {
println("\(genre)")
}
两个集合操作
对两个集合的交并补操作
- union(_:) 两个集合的并集
- subtract(_:) 两个集合的交集的对于两者交集取补集
- intersect(_:)两个集合的交集
- exclusiveOr(_:) 对b取并集的补集
let oddDigits: Set = [1,3,5,7,9]
let evenDigits: Set = [0,2,4,6,8]
let singleDigitPrimeNumbers: Set = [2,7]
sorted(oddDigits.union(evenDigits))
// [0,1,2,3,4,5,6,7,8,9]
sorted(oddDigits.intersect(evenDigits))
// []
sorted(oddDigits.subtract(singleDigitPrimeNumbers))
// [1,9]
sorted(oddDigits.exclusiveOr(singleDigitPrimeNumbers))
// [1,9]
两个集合的比较
let a:Set = [1,8,9]
let b:Set = [1,2]
let c:Set = [7,9]
let d:Set = [1,2]
操作符 | 意义 | 例子 |
---|---|---|
== | 元素全部相同 | b=d |
isSubsetOf(_:) | (操作数)是否为(参数)的子集 | b.isSubsetOf(a) |
isSupersetOf(_:) | (操作数) 是否为(参数)的全集 | a.isSupersetOf(b) |
isDisjointWith(_:) | 两个集合是否有交集 | a.isDisjointWith(c) |
字典
创建字典
var namesOfIntegers = [Int: String]()
访问字典
airports["LHR"] = "London"
更新元素
if let oldValue = airports.updateValue("Dublin Airport",forKey: "DUB") {
println("The old value for DUB was \(oldValue).")
}
遍历字典
//键值一起
for (airportCode,airportName) in airports {
println("\(airportCode): \(airportName)")
}
//根据键
for airportCode in airports.keys {
println("Airport code: \(airportCode)")
}
//根据值
for airportName in airports.values {
println("Airport name: \(airportName)")
}
复制所有的键/值
let airportCodes = [String](airports.keys)
// airportCodes is ["YYZ","LHR"]
let airportNames = [String](airports.values)
// airportNames is ["Toronto Pearson","London Heathrow"]