for (index, item) in shoppingList.enumerate(){
print("\(index) item is \(item)")
}
集合:集合是存储相同类型不同值的无序容器,即是说集合中的元素没有相同的,而且是无序的。Set和Foundation库中的NSSet相关。
a. 集合类型的哈希值(Hash Values):
在集合中存储的元素的类型必须有哈希值,即是说这个类型必须提供一个方法来计算本身的哈希值。
哈希值是一个Int类型的值,所有具有等值哈希值的对象都认为是相同的,即是,a.hashValue == b.hashValue,那么 a == b。
Swift的所有基本类型(如:String、Int、Double、Bool)默认都是可哈希的,所以可以作为集合元素的类型,也可作为字典键的类型。
没有关联值的枚举类型默认也是可哈希的。
b. 集合类型参数:
Swift的集合类型写成:Set<Type>,不像数组,集合是没有简写的方式的。
c. 创建和初始化一个空集合:
h. 判断所属关系:a、b和c是三个集合
1) == :判断两个集合是否相等,即是含有相同的元素;
2) isSubsetOf(_:):判断是否为子集;
3)isSupersetOf(_:) :判断是否为父集。
字典:字典是存储键-值对的元素的无序容器。每一个值都和独一无二的键相关联。Dictionary和Foundation库中的NSDictionary相关。
a. 字典类型参数简写:
字典类型参数完整的写法是:Dictionary<Key, Value>,可简写为[Key: Value]如:
var dic: Dictionary<String,Int>
var dic1: [String:Int]
b. 创建一个空字典:
var dic = [Int: String]()
//创建了一个空字典
dic[24] = "ZHUO Zeng-si"
//字典现在有一个键值对了
dic = [:]
//字典现在又为空了
c. 采用字典字面值来创建字典:
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
d. 访问和修改字典:
1) 获取元素个数和判断字典是否为空和数组相同;
2) 增加元素:
键值对:airports["LHR"] = "London Heathrow"
updateValue(_:forKey:):airports.updateValue("London Heathrow", forKey: "LHR")
如果键值对在字典中存在,则更新值,若不存在,则添加;
而且该方法返回一个可选值,若原来有键值对在字典中存在,则返回键值对的值,否则,返回nil。
3) 通过下标访问字典,返回一个可选值,如:
if let airport = airports["LHR"] {
print("\(airport)");
}else{
print("there is no value with the key is LHR")
}
4) 删除元素:
将一个元素的值设为nil,则该元素就在字典中删除了,如:
airports["LHR"] = nil
也可以采用removeValueForKey(_:) 这个方法来删除一个键值对。
如果键值对存在,该方法返回值,若键值对不存在,则返回一个nil,如下面的可选绑定:
if let airport = airports.removeValueForKey("LHR"){
print("\(airport)");
}else{
print("there is no value with the key is LHR")
}
5) 遍历字典:
for - in 循环:
a) 遍历元素:
for (airportCode, airportName) in airports {
print("\(airportCode) : \(airportName)" )
}
b) 遍历键:
for airportCode in airports.keys {
print("Airport Code: \(airportCode)")
}
c) 遍历值:
for airportName in airports.values {
print("Airport Name: \(airportName)")
}
6)获取字典的所有键和值:
let airportNames = [String](airports.values)
let airportCodes = [String](airports.keys)